如何在T-SQL奖品表中查询同时获得Gold与Silver奖品的用户
解决方法
要找出同时获得Gold和Silver奖品的用户,你可以用以下几种T-SQL实现方式:
方法1:GROUP BY + HAVING子句
先筛选出涉及目标奖品的记录,按用户分组后,通过COUNT(DISTINCT Prize)确保用户同时拥有两种奖品:
SELECT [User] FROM Entries WHERE Prize IN ('Gold', 'Silver') GROUP BY [User] HAVING COUNT(DISTINCT Prize) = 2;
方法2:EXISTS子查询
通过两次存在性检查,确认用户同时存在Gold和Silver的获奖记录:
SELECT DISTINCT [User] FROM Entries e WHERE EXISTS (SELECT 1 FROM Entries WHERE [User] = e.[User] AND Prize = 'Gold') AND EXISTS (SELECT 1 FROM Entries WHERE [User] = e.[User] AND Prize = 'Silver');
方法3:自连接
将表与自身连接,匹配同一用户的Gold和Silver记录,最后去重得到结果:
SELECT DISTINCT e1.[User] FROM Entries e1 JOIN Entries e2 ON e1.[User] = e2.[User] WHERE e1.Prize = 'Gold' AND e2.Prize = 'Silver';
原查询问题说明
- 使用
OR会返回所有获得Gold或Silver的用户,包括只拥有其中一种的用户,不符合需求。 - 使用
AND在同一行条件中不可能成立,因为每条记录只能对应一个奖品。
内容的提问来源于stack exchange,提问作者cocomac
相关产品推荐
相关产品推荐

