Pilih rekod yang sepadan dengan berbilang syarat pada lajur yang sama dalam SQL
Pertanyaan SQL kadangkala perlu mendapatkan semula rekod yang sepadan dengan berbilang syarat pada lajur yang sama. Walau bagaimanapun, hanya menggunakan berbilang klausa WHERE dengan lajur yang sama tidak selalu menghasilkan hasil yang diharapkan. Pertimbangkan contoh berikut:
Kami mempunyai jadual pangkalan data yang mengandungi kenalan dan bendera yang menunjukkan status setiap kenalan. Jadual mengandungi data berikut:
ID | contactid | flag | flag_type |
---|---|---|---|
118 | 99 | Volunteer | 1 |
119 | 99 | Uploaded | 2 |
120 | 100 | Via Import | 3 |
121 | 100 | Volunteer | 1 |
122 | 100 | Uploaded | 2 |
Matlamatnya adalah untuk hanya mengembalikan ID kenalan yang sepadan dengan syarat bendera "Sukarelawan" dan "Muat naik". Gunakan pertanyaan berikut:
<code class="language-sql">SELECT contactid WHERE flag = 'Volunteer' AND flag = 'Uploaded'</code>
Tiada keputusan akan dikembalikan kerana setiap syarat hanya menyemak nilai bendera tertentu. Untuk mendapatkan semula data yang diperlukan kita perlu menggunakan kaedah alternatif.
Gunakan GROUP BY dan HAVING
Satu penyelesaian ialah menggunakan klausa GROUP BY dan HAVING. Pertanyaan berikut akan mengumpulkan hasil dengan contactid dan mengira bilangan nilai bendera yang sepadan:
<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>
Kenalan dengan kedua-dua bendera "Sukarelawan" dan "Muat naik" akan dikira sebagai 2. Klausa HAVING kemudian menapis keputusan untuk memasukkan hanya kenalan ini.
Gunakan sambungan
Cara lain ialah menggunakan sambungan. Pertanyaan berikut akan melakukan penyambungan sendiri pada jadual jadual anda:
<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>
Pertanyaan ini akan membuat jadual sementara yang mengandungi gabungan semua kenalan yang mempunyai kedua-dua bendera "Sukarelawan" dan "Muat naik". Klausa WHERE kemudian menapis hasil untuk hanya memasukkan kenalan yang memenuhi dua syarat ini.
Pemilihan kaedah
Cara terbaik untuk memilih rekod dengan berbilang syarat pada lajur yang sama bergantung pada saiz dan struktur data anda. Untuk set data besar dengan senarai panjang kriteria padanan, penyelesaian GROUP BY dan HAVING mungkin lebih cekap. Untuk set data kecil dengan senarai kriteria pemadanan yang lebih pendek, penyelesaian JOIN mungkin lebih pantas.
Atas ialah kandungan terperinci Bagaimana untuk Memilih Rekod Memadankan Pelbagai Kriteria pada Lajur yang Sama dalam SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!