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