Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengemas kini Baris Jadual PostgreSQL Menggunakan Subkueri dengan Logik Bersyarat?

Bagaimana untuk Mengemas kini Baris Jadual PostgreSQL Menggunakan Subkueri dengan Logik Bersyarat?

DDD
DDDasal
2025-01-05 02:09:41351semak imbas

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

Mengemas kini Baris Jadual PostgreSQL Menggunakan Subkueri

Pertimbangkan senario di mana anda mempunyai jadual sedia ada dalam pangkalan data Postgres, dan anda perlu mengemas kini barisnya menggunakan nilai yang diperoleh daripada subkueri. Tugasan ini boleh dicapai menggunakan pernyataan kemas kini yang ringkas.

Dalam kes khusus ini, objektifnya adalah untuk mengemas kini baris dalam jadual dummy menggunakan nilai yang diambil daripada subkueri kompleks yang menyertai berbilang jadual (cust_original, supp_original dan partner_original ) dan menggunakan logik bersyarat untuk menentukan nilai untuk pelanggan, pembekal dan rakan kongsi lajur.

Untuk melaksanakan kemas kini ini, anda boleh menggunakan sintaks berikut:

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;

Penyataan ini memanfaatkan subkueri untuk memperoleh nilai untuk lajur pelanggan, pembekal dan rakan kongsi. Subquery melaksanakan gabungan yang diperlukan dan logik bersyarat seperti yang dinyatakan dalam pernyataan sisipan anda yang disediakan.

Pernyataan KEMASKINI luar kemudian menggunakan nilai terbitan subkueri ini pada lajur yang sepadan dalam jadual dummy, mengemas kini baris sedia ada berdasarkan medan alamat_id.

Pendekatan ini amat berguna apabila anda perlu mengemas kini baris jadual berdasarkan nilai yang diperoleh daripada kompleks atau pengiraan dinamik atau apabila bekerja dengan set data yang besar di mana kemas kini baris demi baris tradisional boleh menjadi tidak cekap.

Atas ialah kandungan terperinci Bagaimana untuk Mengemas kini Baris Jadual PostgreSQL Menggunakan Subkueri dengan Logik Bersyarat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn