Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Memilih Rekod Memadankan Pelbagai Keadaan dengan Cekap pada Lajur yang Sama dalam SQL?

Bagaimana untuk Memilih Rekod Memadankan Pelbagai Keadaan dengan Cekap pada Lajur yang Sama dalam SQL?

Linda Hamilton
Lepaskan: 2025-01-21 15:56:10
asal
225 orang telah melayarinya

How to Efficiently Select Records Matching Multiple Conditions on the Same Column in SQL?

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan