ホームページ >データベース >mysql チュートリアル >サブクエリを使用して PostgreSQL テーブルの行を更新するにはどうすればよいですか?

サブクエリを使用して PostgreSQL テーブルの行を更新するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-05 14:38:41343ブラウズ

How Can I Update PostgreSQL Table Rows Using a Subquery?

サブクエリを使用した PostgreSQL でのテーブル行の更新

PostgreSQL では、SELECT ステートメントから返された値を使用して既存の行を更新することが、便利な構文を通じて実行できます。

提供されたテーブルを検討してくださいスキーマ:

CREATE TABLE public.dummy (
  address_id SERIAL,
  addr1 character(40),
  addr2 character(40),
  city character(25),
  state character(2),
  zip character(5),
  customer boolean,
  supplier boolean,
  partner boolean
);

サブクエリに基づいてテーブルを更新するには、次の構文を使用します:

UPDATE dummy
SET customer = subquery.customer,
    address = subquery.address,
    partn = subquery.partn
FROM (
  SELECT address_id, customer, address, partn
  FROM /* big hairy SQL */ ...
) AS subquery
WHERE dummy.address_id = subquery.address_id;

この構文は標準 SQL ではありませんが、このタイプのクエリには便利です。たとえば、複雑な結合の結果に基づいて customer、address、partn 列を更新するには、次のサブクエリを使用できます。

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 address,
       CASE
           WHEN partn.addr1 IS NOT NULL THEN TRUE
           ELSE FALSE
       END AS partn
FROM (
    SELECT *
    FROM address
) 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;

この更新を実行すると、ダミー テーブル内の指定された列が更新されます。サブクエリから取得した値で更新されます。

以上がサブクエリを使用して PostgreSQL テーブルの行を更新するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。