Możesz użyć GROUP BY
i 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
(zakładając, że contact_id, flag
jest unikalny).
Lub użyj złączeń:
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'
Jeśli lista flag jest bardzo długa i jest dużo dopasowań, pierwszy jest prawdopodobnie szybszy. Jeśli lista flag jest krótka i jest mało dopasowań, prawdopodobnie okaże się, że druga jest szybsza. Jeśli wydajność jest problemem, spróbuj przetestować oba na swoich danych, aby zobaczyć, który działa najlepiej.