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.