SELECTING avec plusieurs conditions WHERE sur la même colonne
P粉384366923
2023-08-23 19:08:16
<p>D'accord, je pense que j'oublie peut-être quelque chose d'évident/simple ici... mais je dois écrire une requête qui renvoie uniquement les enregistrements qui correspondent à plusieurs critères sur la même colonne... </ p>
<p>Ma table est une configuration de lien très simple pour appliquer des indicateurs aux utilisateurs...</p>
<pre class="brush:php;toolbar:false;">ID contactid flag flag_type
----------------------------------
118 99 Bénévole 1
119 99 Téléchargé 2
120 100 via importation 3
121 100 Bénévole 1
122 100 Téléchargé 2</pre>
<p>Attendez... Dans ce cas, vous verrez que les contacts 99 et 100 sont tous deux marqués comme « Bénévole » et « Téléchargé »...</p>
<p>Tout ce que j'ai à faire est de renvoyer les identifiants de contact qui correspondent à plusieurs critères saisis via le formulaire de recherche... l'identifiant de contact doit correspondre à tous les indicateurs sélectionnés... Dans ma tête, le SQL devrait ressembler à : < /p>
</p>
<pre class="brush:php;toolbar:false;">SELECT identifiant de contact
OÙ drapeau = 'Bénévole'
AND flag = 'Téléchargé'...</pre>
<p>Mais... rien n'est renvoyé... qu'est-ce que je fais de mal ici ? </p>
Utilisation :
La clé est le nombre d'arguments dans la clause
t.flag
的计数需要等于IN
.Utilisez
COUNT(DISTINCT t.flag)
au cas où la combinaison de contactid et flag n'a pas de contrainte unique - s'il n'y a aucune chance de duplication, vous pouvez omettre le DISTINCT de la requête :Vous pouvez utiliser
GROUP BY
和HAVING COUNT(*) = _
:(en supposant que
contact_id, flag
est unique).Ou utilisez le lien :
Si la liste des drapeaux est longue et qu'il y a de nombreux matchs, le premier peut être plus rapide. Si la liste des drapeaux est courte et qu'il y a peu de correspondances, vous constaterez peut-être que le second est plus rapide. Si les performances posent problème, essayez de les tester sur vos données pour voir laquelle fonctionne le mieux.