Heim >Datenbank >MySQL-Tutorial >Wie aktualisiere ich PostgreSQL-Zeilen mit Werten aus einer Unterabfrage?

Wie aktualisiere ich PostgreSQL-Zeilen mit Werten aus einer Unterabfrage?

DDD
DDDOriginal
2025-01-04 21:10:40224Durchsuche

How to Update PostgreSQL Rows with Values from a Subquery?

PostgreSQL-Tabellenzeilen mithilfe von Unterabfragen aktualisieren

Um vorhandene Zeilen in einer PostgreSQL-Tabelle mithilfe von Werten zu aktualisieren, die von einer Unterabfrage zurückgegeben werden, können Sie Folgendes verwenden Syntax:

UPDATE table_name
SET column_name = subquery.column_name
FROM (SELECT ...) AS subquery
WHERE table_name.id = subquery.id;

Betrachten Sie die Beispieltabelle als Dummy vorausgesetzt:

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
);

Um die Kunden-, Lieferanten- und Partnerspalten basierend auf den von einer SELECT-Anweisung zurückgegebenen Werten zu aktualisieren, können Sie die folgende Syntax verwenden:

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 address 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 CAST(cust.zip AS VARCHAR(5)) = CAST(pa.zip AS VARCHAR(5)))
      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 CAST(pa.zip AS VARCHAR(5)) = CAST(CAST(suppl.zip AS VARCHAR(25)) AS VARCHAR(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 CAST(pa.zip AS VARCHAR(5)) = CAST(CAST(partn.zip AS VARCHAR(25)) AS VARCHAR(5)))) AS subquery
WHERE dummy.address_id = subquery.address_id;

Diese Abfrage führt Folgendes aus Folgende Operationen:

  • Wählt die Kunden-, Lieferanten- und Partnerwerte für jede Zeile in der Dummy-Tabelle aus einer Unterabfrage aus, die die Dummy-Tabelle mit dem verknüpft cust_original-, supp_original- und partner_original-Tabellen.
  • Setzt die Kunden-, Lieferanten- und Partnerspalten in der Dummy-Tabelle auf die von der Unterabfrage zurückgegebenen Werte.
  • Aktualisiert nur die Zeilen in der Dummy-Tabelle eine passende Adress-ID in der Unterabfrage haben.

Das obige ist der detaillierte Inhalt vonWie aktualisiere ich PostgreSQL-Zeilen mit Werten aus einer Unterabfrage?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn