MEMILIH dengan berbilang keadaan WHERE pada lajur yang sama
P粉384366923
2023-08-23 19:08:16
<p>Baiklah, saya rasa saya mungkin terlepas pandang sesuatu yang jelas/mudah di sini... tetapi saya perlu menulis pertanyaan yang hanya mengembalikan rekod yang sepadan dengan berbilang kriteria pada lajur yang sama... </ p>
<p>Jadual saya ialah persediaan pautan yang sangat mudah untuk menggunakan bendera kepada pengguna...</p>
<pre class="brush:php;toolbar:false;">ID contactid flag flag_type
----------------------------------
118 99 Sukarelawan 1
119 99 Dimuat naik 2
120 100 Melalui Import 3
121 100 Sukarelawan 1
122 100 Dimuat naik 2</pre>
<p>Tunggu... Dalam kes ini, anda akan melihat bahawa kenalan 99 dan 100 kedua-duanya ditandakan sebagai "Sukarelawan" dan "Dimuat naik"...</p>
<p>Apa yang perlu saya lakukan ialah mengembalikan contactid yang sepadan dengan berbilang kriteria yang dimasukkan melalui borang carian... contactid mesti sepadan dengan semua bendera yang dipilih... Dalam kepala saya, SQL sepatutnya kelihatan seperti: < ;
</p>
<pre class="brush:php;toolbar:false;">SELECT contactid
WHERE bendera = 'Sukarelawan'
DAN bendera = 'Dimuat naik'...</pre>
<p>Tetapi...tiada apa yang dikembalikan...apa salah saya di sini? </p>
Penggunaan:
Kuncinya ialah bilangan hujah dalam klausa
t.flag
的计数需要等于IN
.Gunakan
COUNT(DISTINCT t.flag)
sekiranya gabungan contactid dan bendera tidak mempunyai kekangan unik - jika tiada peluang untuk penduaan, anda boleh menghilangkan DISTINCT daripada pertanyaan:Anda boleh menggunakan
GROUP BY
和HAVING COUNT(*) = _
:(dengan andaian
contact_id, flag
adalah unik).Atau gunakan pautan:
Jika senarai bendera panjang dan banyak perlawanan, yang pertama mungkin lebih pantas. Jika senarai bendera pendek dan terdapat beberapa perlawanan, anda mungkin mendapati yang kedua lebih pantas. Jika prestasi adalah masalah, cuba uji pada data anda untuk melihat yang mana satu berfungsi paling baik.