Mysql
 sql >> Database >  >> RDS >> Mysql

SELEZIONE con più condizioni WHERE sulla stessa colonna

Puoi utilizzare GROUP BY e 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

(supponendo contact_id, flag è unico).

Oppure usa i join:

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'

Se l'elenco delle bandiere è molto lungo e ci sono molte corrispondenze, la prima è probabilmente più veloce. Se l'elenco delle bandiere è breve e ci sono poche corrispondenze, probabilmente scoprirai che la seconda è più veloce. Se le prestazioni sono un problema, prova a testare entrambi i tuoi dati per vedere quale funziona meglio.