Heim > Fragen und Antworten > Hauptteil
P粉5118967162023-08-24 17:05:54
用途:
SELECT t.contactid FROM YOUR_TABLE t WHERE flag IN ('Volunteer', 'Uploaded') GROUP BY t.contactid HAVING COUNT(DISTINCT t.flag) = 2
关键是 t.flag
的计数需要等于 IN
子句中的参数数量。
使用 COUNT(DISTINCT t.flag)
是为了防止 contactid 和 flag 的组合没有唯一约束 - 如果没有重复的机会,您可以省略 DISTINCT来自查询:
SELECT t.contactid FROM YOUR_TABLE t WHERE flag IN ('Volunteer', 'Uploaded') GROUP BY t.contactid HAVING COUNT(t.flag) = 2
P粉1388714852023-08-24 11:10:07
您可以使用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'
如果标志列表很长并且有很多匹配项,第一个可能会更快。如果标志列表很短并且匹配项很少,您可能会发现第二个更快。如果性能是一个问题,请尝试对您的数据进行测试,看看哪个效果最好。