Heim >Datenbank >MySQL-Tutorial >Wie aktualisiere ich PostgreSQL-Tabellenzeilen mithilfe einer Unterabfrage mit bedingter Logik?

Wie aktualisiere ich PostgreSQL-Tabellenzeilen mithilfe einer Unterabfrage mit bedingter Logik?

DDD
DDDOriginal
2025-01-05 02:09:41347Durchsuche

How to Update PostgreSQL Table Rows Using a Subquery with Conditional Logic?

PostgreSQL-Tabellenzeilen mithilfe einer Unterabfrage aktualisieren

Stellen Sie sich ein Szenario vor, in dem Sie eine vorhandene Tabelle in einer Postgres-Datenbank haben und diese aktualisieren müssen seine Zeilen mithilfe von Werten, die aus einer Unterabfrage erhalten wurden. Diese Aufgabe kann mit einer prägnanten Update-Anweisung erledigt werden.

In diesem speziellen Fall besteht das Ziel darin, Zeilen in der Dummy-Tabelle mithilfe von Werten zu aktualisieren, die aus einer komplexen Unterabfrage abgerufen werden, die mehrere Tabellen verknüpft (cust_original, supp_original und partner_original). ) und wendet bedingte Logik an, um die Werte für die Spalten „Kunde“, „Lieferant“ und „Partner“ zu bestimmen.

Um diese Aktualisierung durchzuführen, können Sie Folgendes verwenden Syntax:

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 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
) AS subquery
WHERE dummy.address_id = subquery.address_id;

Diese Anweisung nutzt eine Unterabfrage, um die Werte für die Spalten „Kunde“, „Lieferant“ und „Partner“ abzuleiten. Die Unterabfrage führt die erforderlichen Verknüpfungen und die bedingte Logik aus, wie in Ihrer bereitgestellten Einfügeanweisung angegeben.

Die äußere UPDATE-Anweisung wendet dann diese von der Unterabfrage abgeleiteten Werte auf die entsprechenden Spalten in der Dummy-Tabelle an und aktualisiert die vorhandenen Zeilen basierend auf adress_id-Feld.

Dieser Ansatz ist besonders nützlich, wenn Sie Tabellenzeilen basierend auf Werten aktualisieren müssen, die aus komplexen oder dynamischen Berechnungen abgeleitet wurden, oder wenn Sie mit großen Datensätzen arbeiten, wo dies traditionell der Fall ist Zeilenweise Aktualisierungen können ineffizient sein.

Das obige ist der detaillierte Inhalt vonWie aktualisiere ich PostgreSQL-Tabellenzeilen mithilfe einer Unterabfrage mit bedingter Logik?. 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