Petua pertanyaan berbilang syarat SQL untuk rekod dalam lajur yang sama
Dalam pertanyaan SQL, menapis rekod berdasarkan berbilang syarat, terutamanya apabila syarat ini digunakan pada lajur yang sama, memerlukan beberapa kemahiran. Artikel ini akan meneroka cara mengendalikan situasi ini dengan cekap.
Sebagai contoh, satu jadual mengaitkan pengguna dan jenis teg, dan matlamatnya ialah untuk mendapatkan ID kenalan yang sepadan dengan tanda semak dalam semua borang carian. Pada pandangan pertama, pertanyaan berikut kelihatan intuitif:
<code class="language-sql">SELECT contactid WHERE flag = 'Volunteer' AND flag = 'Uploaded'...</code>
Walau bagaimanapun, ia tidak mengembalikan hasil. Kerana operator AND memerlukan baris yang sama untuk memenuhi dua syarat pada masa yang sama, dan baris tersebut tidak wujud dalam jadual ini.
Untuk menyelesaikan masalah ini, satu cara ialah menggunakan GROUP BY
dan HAVING COUNT(*) = n
, dengan n ialah bilangan penanda yang dipilih:
<code class="language-sql">SELECT contact_id FROM your_table WHERE flag IN ('Volunteer', 'Uploaded', ...) GROUP BY contact_id HAVING COUNT(*) = 2 -- // 必须与WHERE flag IN (...) 列表中的数量匹配</code>
Kaedah ini menyemak sama ada contact_id berlaku n kali dengan setiap teg n yang terkandung dalam klausa WHERE
. Cara lain ialah menggunakan join:
<code class="language-sql">SELECT T1.contact_id FROM your_table T1 JOIN your_table T2 ON T1.contact_id = T2.contact_id AND T2.flag = 'Uploaded' -- // 如有必要,可以添加更多连接 WHERE T1.flag = 'Volunteer'</code>
Di sini, berbilang cantuman digunakan untuk mengaitkan baris yang mewakili contact_id yang sama dengan tag yang diperlukan.
Kaedah yang manakah untuk dipilih bergantung pada bilangan tag yang akan disemak dan bilangan rekod yang sepadan. GROUP BY
mungkin lebih pantas apabila berurusan dengan bilangan teg yang banyak dan sebilangan kecil padanan, manakala gabungan mungkin berprestasi lebih baik apabila bilangan teg kecil dan terdapat banyak padanan. Adalah disyorkan untuk menguji kedua-dua kaedah pada data sebenar untuk mendapatkan prestasi terbaik.
Atas ialah kandungan terperinci Bagaimana untuk Memilih Rekod Memadankan Pelbagai Keadaan dengan Cekap pada Lajur yang Sama dalam SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!