Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengemas kini Baris Jadual PostgreSQL Menggunakan Subqueries untuk Tetapan Bendera Bersyarat?
Mengemas kini Baris Jadual dalam PostgreSQL Menggunakan Subkueri
Postgres menyediakan keupayaan untuk mengemas kini baris jadual sedia ada menggunakan nilai yang diperoleh daripada subkueri. Ini boleh menjadi sangat bermanfaat untuk senario di mana data perlu diubah suai berdasarkan set data lain yang disimpan dalam pangkalan data.
Pernyataan Masalah:
Anda mempunyai jadual bernama "dummy" dengan pelbagai medan yang mewakili butiran alamat dan bendera pelanggan, pembekal dan rakan kongsi. Objektifnya adalah untuk mengemas kini jadual dengan menetapkan bendera pelanggan, pembekal dan rakan kongsi kepada Betul atau Salah berdasarkan sama ada data padanan wujud dalam jadual "cust_original," "suppl_original" dan "partner_original".
Penyelesaian:
Untuk mencapai ini menggunakan pernyataan kemas kini SQL, anda boleh memanfaatkan Keupayaan subquery PostgreSQL. Pernyataan kemas kini mengambil sintaks berikut:
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;
Dalam konteks masalah khusus anda, pertanyaan kemas kini akan kelihatan seperti ini:
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;
Pernyataan kemas kini berasaskan subkueri ini mengemas kini dengan cekap jadual "dummy" dengan menetapkan bendera pelanggan, pembekal dan rakan kongsi berdasarkan data padanan dalam subkueri, yang melaksanakan gabungan dan kes yang diperlukan penilaian.
Atas ialah kandungan terperinci Bagaimana untuk Mengemas kini Baris Jadual PostgreSQL Menggunakan Subqueries untuk Tetapan Bendera Bersyarat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!