Heim > Datenbank > MySQL-Tutorial > Wie aktualisiere ich PostgreSQL-Tabellenzeilen mithilfe von Unterabfragen für die Einstellung bedingter Flags?

Wie aktualisiere ich PostgreSQL-Tabellenzeilen mithilfe von Unterabfragen für die Einstellung bedingter Flags?

Patricia Arquette
Freigeben: 2025-01-03 20:59:40
Original
147 Leute haben es durchsucht

How to Update PostgreSQL Table Rows Using Subqueries for Conditional Flag Setting?

Aktualisieren von Tabellenzeilen in PostgreSQL mithilfe einer Unterabfrage

Postgres bietet die Möglichkeit, vorhandene Tabellenzeilen mithilfe von Werten zu aktualisieren, die aus einer Unterabfrage abgeleitet wurden. Dies kann für Szenarien von großem Nutzen sein, in denen Daten basierend auf einem anderen in der Datenbank gespeicherten Datensatz geändert werden müssen.

Problemstellung:

Sie haben eine Tabelle mit dem Namen „Dummy“ mit verschiedenen Feldern, die Adressdetails sowie Kunden-, Lieferanten- und Partnerkennzeichen darstellen. Das Ziel besteht darin, die Tabelle zu aktualisieren, indem die Flags „Kunde“, „Lieferant“ und „Partner“ auf „Wahr“ oder „Falsch“ gesetzt werden, je nachdem, ob übereinstimmende Daten in den Tabellen „cust_original“, „suppl_original“ und „partner_original“ vorhanden sind.

Lösung:

Um dies mithilfe einer SQL-Update-Anweisung zu erreichen, können Sie die Unterabfragefunktion von PostgreSQL nutzen. Die Update-Anweisung hat die folgende Syntax:

UPDATE table_name
SET field1 = subquery_result1,
    field2 = subquery_result2,
    ...
FROM (select field1, field2, ...
      from subquery) AS subquery_name
WHERE table_name.id = subquery_name.id;
Nach dem Login kopieren

Im Kontext Ihres spezifischen Problems würde die Update-Abfrage so aussehen:

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 dummy 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;
Nach dem Login kopieren

Diese unterabfragebasierte Update-Anweisung aktualisiert effizient die „Dummy“-Tabelle durch Setzen der Kunden-, Lieferanten- und Partner-Flags basierend auf den übereinstimmenden Daten in der Unterabfrage, die die notwendigen Verknüpfungen und Fallauswertungen durchführt.

Das obige ist der detaillierte Inhalt vonWie aktualisiere ich PostgreSQL-Tabellenzeilen mithilfe von Unterabfragen für die Einstellung bedingter Flags?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage