Можете да използвате или GROUP BY
и 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
(приемаме contact_id, flag
е уникален).
Или използвайте съединения:
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'
Ако списъкът с флагове е много дълъг и има много съвпадения, първото вероятно е по-бързо. Ако списъкът с флагове е кратък и има малко съвпадения, вероятно ще откриете, че вторият е по-бърз. Ако производителността е проблем, опитайте да тествате и двете върху данните си, за да видите кое работи най-добре.