Du kan antingen använda GROUP BY
och 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
(förutsatt att contact_id, flag
är unik).
Eller använd 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'
Om listan med flaggor är väldigt lång och det finns många matcher är den första förmodligen snabbare. Om listan med flaggor är kort och det finns få matchningar, kommer du förmodligen att upptäcka att den andra är snabbare. Om prestanda är ett problem, testa båda på dina data för att se vilken som fungerar bäst.