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

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

Barbara Streisand
リリース: 2025-01-05 14:38:41
オリジナル
369 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート