Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

SELECIONANDO com várias condições WHERE na mesma coluna


Você pode usar 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

(assumindo contact_id, flag é único).

Ou use junções:
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 a lista de sinalizadores for muito longa e houver muitas correspondências, a primeira provavelmente será mais rápida. Se a lista de sinalizadores for curta e houver poucas correspondências, você provavelmente descobrirá que o segundo é mais rápido. Se o desempenho for uma preocupação, tente testar ambos em seus dados para ver qual funciona melhor.