Mysql
 sql >> Base de données >  >> RDS >> Mysql

SELECTION avec plusieurs conditions WHERE sur la même colonne

Vous pouvez soit utiliser GROUP BY et 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 contact_id, flag est unique).

Ou utilisez des jointures :

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 très longue et qu'il y a beaucoup de correspondances, le premier est probablement le plus rapide. Si la liste des drapeaux est courte et qu'il y a peu de correspondances, vous constaterez probablement que la seconde est plus rapide. Si les performances vous préoccupent, essayez de tester les deux sur vos données pour voir ce qui fonctionne le mieux.