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

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

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-03 18:06:42690ブラウズ

How to Update Postgres Table Rows Using Subqueries?

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

Postgres では、サブクエリを使用して各行に必要な値を取得することで、テーブル行の更新を実行できます。これを実現する 1 つの方法は、次の構文を使用することです。

UPDATE table_name
SET column_name = (SELECT value FROM subquery WHERE subquery_condition)
WHERE table_condition;

次の例を考えてみましょう。ここでの目標は、Postgres 8.4 データベース内のダミー テーブルを更新し、顧客、サプライヤー、パートナーの列を埋めることです。サブクエリから派生した値を使用します:

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
  
)
WITH (
  OIDS=FALSE
);

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

このクエリは、ダミーの各行の顧客、サプライヤー、パートナーの列を効果的に更新します。対応するアドレスが cust_original、supp_original、partner_original テーブルで見つかった場合は TRUE に設定し、それ以外の場合は FALSE に設定します。

この構文は標準 SQL ではありませんが、派生した値に基づいてテーブルの行を更新するのに便利です。特に Postgres のサブクエリから。

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

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