sql >> Base de Datos >  >> RDS >> Mysql

SELECCIÓN con múltiples condiciones DONDE en la misma columna

Puedes usar GROUP BY y 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

(asumiendo contact_id, flag es único).

O use uniones:

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 lista de banderas es muy larga y hay muchas coincidencias, la primera probablemente sea más rápida. Si la lista de banderas es corta y hay pocas coincidencias, probablemente encontrarás que la segunda es más rápida. Si le preocupa el rendimiento, intente probar ambos en sus datos para ver cuál funciona mejor.