首页 > 数据库 > mysql教程 > 如何使用子查询进行条件标志设置来更新 PostgreSQL 表行?

如何使用子查询进行条件标志设置来更新 PostgreSQL 表行?

Patricia Arquette
发布: 2025-01-03 20:59:40
原创
203 人浏览过

How to Update PostgreSQL Table Rows Using Subqueries for Conditional Flag Setting?

使用子查询更新 PostgreSQL 中的表行

Postgres 提供了使用从子查询派生的值更新现有表行的功能。这对于需要根据数据库中存储的另一组数据修改数据的场景非常有用。

问题陈述:

您有一个名为的表“虚拟”,具有代表地址详细信息以及客户、供应商和合作伙伴标志的各个字段。目标是根据“cust_original”、“suppl_original”和“partner_original”表中是否存在匹配数据,分别将客户、供应商和合作伙伴标志设置为 True 或 False,从而更新表。

解决方案:

要使用 SQL 更新语句完成此操作,您可以利用PostgreSQL 的子查询功能。更新语句采用以下语法:

UPDATE table_name
SET field1 = subquery_result1,
    field2 = subquery_result2,
    ...
FROM (select field1, field2, ...
      from subquery) AS subquery_name
WHERE table_name.id = subquery_name.id;
登录后复制

在您的特定问题的上下文中,更新查询将如下所示:

UPDATE dummy
SET customer = subquery.customer,
    supplier = subquery.supplier,
    partner = subquery.partner
FROM (SELECT address_id,
             CASE WHEN cust.addr1 IS NOT NULL THEN TRUE ELSE FALSE END AS customer, 
             CASE WHEN suppl.addr1 IS NOT NULL THEN TRUE ELSE FALSE END AS supplier,
             CASE WHEN partn.addr1 IS NOT NULL THEN TRUE ELSE FALSE END AS partner
      FROM dummy AS pa
      LEFT OUTER JOIN cust_original AS cust
        ON (pa.addr1 = cust.addr1 AND pa.addr2 = cust.addr2 AND pa.city = cust.city
            AND pa.state = cust.state AND SUBSTRING(cust.zip, 1, 5) = pa.zip)
      LEFT OUTER JOIN supp_original AS suppl
        ON (pa.addr1 = suppl.addr1 AND pa.addr2 = suppl.addr2 AND pa.city = suppl.city
            AND pa.state = suppl.state AND pa.zip = SUBSTRING(suppl.zip, 1, 5))
      LEFT OUTER JOIN partner_original AS partn
        ON (pa.addr1 = partn.addr1 AND pa.addr2 = partn.addr2 AND pa.city = partn.city
            AND pa.state = partn.state AND pa.zip = SUBSTRING(partn.zip, 1, 5))
      WHERE pa.address_id = address_id) AS subquery
WHERE dummy.address_id = subquery.address_id;
登录后复制

此基于子查询的更新语句有效更新通过根据子查询中的匹配数据设置客户、供应商和合作伙伴标志来创建“虚拟”表,子查询执行必要的联接和案例评估。

以上是如何使用子查询进行条件标志设置来更新 PostgreSQL 表行?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板