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'
如果標誌清單很長並且有很多匹配項,第一個可能會更快。如果標誌清單很短且符合項目很少,您可能會發現第二個更快。如果效能是一個問題,請嘗試對您的資料進行測試,看看哪個效果最好。