Maison > Questions et réponses > le corps du texte
P粉5118967162023-08-24 17:05:54
Utilisation :
SELECT t.contactid FROM YOUR_TABLE t WHERE flag IN ('Volunteer', 'Uploaded') GROUP BY t.contactid HAVING COUNT(DISTINCT t.flag) = 2
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 :
SELECT t.contactid FROM YOUR_TABLE t WHERE flag IN ('Volunteer', 'Uploaded') GROUP BY t.contactid HAVING COUNT(t.flag) = 2
P粉1388714852023-08-24 11:10:07
Vous pouvez utiliser GROUP BY
和HAVING COUNT(*) = _
:
SELECT contact_id FROM your_table WHERE flag IN ('Volunteer', 'Uploaded', ...) GROUP BY contact_id HAVING COUNT(*) = 2 -- // must match number in the WHERE flag IN (...) list
(en supposant que contact_id, flag
est unique).
Ou utilisez le lien :
SELECT T1.contact_id FROM your_table T1 JOIN your_table T2 ON T1.contact_id = T2.contact_id AND T2.flag = 'Uploaded' -- // more joins if necessary WHERE T1.flag = 'Volunteer'
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.