Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengemas kini Baris Jadual PostgreSQL Menggunakan Subqueries untuk Tetapan Bendera Bersyarat?

Bagaimana untuk Mengemas kini Baris Jadual PostgreSQL Menggunakan Subqueries untuk Tetapan Bendera Bersyarat?

Patricia Arquette
Patricia Arquetteasal
2025-01-03 20:59:40209semak imbas

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

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!

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