Mysql
 sql >> Datenbank >  >> RDS >> Mysql

SELECTING mit mehreren WHERE-Bedingungen für dieselbe Spalte

Sie können entweder GROUP BY verwenden und 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

(unter der Annahme contact_id, flag ist einzigartig).

Oder verwenden Sie Joins:

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'

Wenn die Liste der Flaggen sehr lang ist und es viele Übereinstimmungen gibt, ist die erste wahrscheinlich schneller. Wenn die Liste der Flaggen kurz ist und es nur wenige Übereinstimmungen gibt, werden Sie wahrscheinlich feststellen, dass die zweite schneller ist. Wenn die Leistung ein Problem darstellt, testen Sie beides anhand Ihrer Daten, um zu sehen, was am besten funktioniert.