Heim >Datenbank >MySQL-Tutorial >Wie kann ich PostgreSQL-Tabellenzeilen mithilfe einer Unterabfrage aktualisieren?

Wie kann ich PostgreSQL-Tabellenzeilen mithilfe einer Unterabfrage aktualisieren?

Barbara Streisand
Barbara StreisandOriginal
2025-01-05 14:38:41370Durchsuche

How Can I Update PostgreSQL Table Rows Using a Subquery?

Aktualisieren von Tabellenzeilen in PostgreSQL mithilfe einer Unterabfrage

In PostgreSQL kann das Aktualisieren vorhandener Zeilen mithilfe von Werten, die von einer SELECT-Anweisung zurückgegeben werden, durch eine praktische Syntax erfolgen.

Beachten Sie das bereitgestellte Tabellenschema:

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

Um die Tabelle basierend auf a zu aktualisieren Verwenden Sie für die Unterabfrage die folgende Syntax:

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;

Diese Syntax ist kein Standard-SQL, eignet sich aber für diese Art von Abfrage. Um beispielsweise die Spalten „Kunde“, „Adresse“ und „Partner“ basierend auf den Ergebnissen einer komplexen Verknüpfung zu aktualisieren, können Sie die folgende Unterabfrage verwenden:

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;

Durch die Ausführung dieser Aktualisierung werden die angegebenen Spalten in der Dummy-Tabelle angezeigt wird mit den aus der Unterabfrage erhaltenen Werten aktualisiert.

Das obige ist der detaillierte Inhalt vonWie kann ich PostgreSQL-Tabellenzeilen mithilfe einer Unterabfrage aktualisieren?. 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