我有一张包含用户ID和奖励ID的表格 用户可以获得不同的奖励或没有奖励。我设置的查询返回所有拥有奖励1,2,3或4的用户。我想只返回拥有所有4个奖项的用户。
这是我到目前为止所拥有的
SELECT ID
FROM awards
WHERE AID in (1,2,3,4)
这又回到了所有人,我需要它才能返回包含所有这些内容的ID。我对SQL
非常不熟悉答案 0 :(得分:4)
您可以使用GROUP BY
按照用户ID分组结果,然后使用HAVING
子句计算每个结果的数量;如果任何只有计数匹配4,则让它返回:
SELECT
ID
FROM
awards
WHERE
AID IN (1, 2, 3, 4)
GROUP BY
ID
HAVING
COUNT(ID) = 4
如果可以多次授予具有相同奖励的用户,则您需要更新HAVING
以解决此问题:
HAVING
COUNT(DISTINCT AID) = 4
如果没有,则第一个例子应该没问题。
另一种方法是在你的AND AID = x
条款中添加一长列WHERE
条件(这绝对有效,可能更容易记住,但对你最有效)=]