Mysql 仅选择玩过特定游戏且没有其他游戏的玩家

Mysql 仅选择玩过特定游戏且没有其他游戏的玩家,mysql,Mysql,我对SQL是相当陌生的,我正试图提出一个问题。我有一个类似的数据集 玩家 masterID firstName lastName 11111 Rob Caspian 22222 Bob Harper 33333 Jon Willow 44444 Ron Anderson 55555 Doug Blake 外表 masterID gameName 11111

我对SQL是相当陌生的,我正试图提出一个问题。我有一个类似的数据集

玩家

masterID   firstName   lastName
11111      Rob         Caspian
22222      Bob         Harper
33333      Jon         Willow
44444      Ron         Anderson
55555      Doug        Blake
外表

masterID   gameName
11111      chess
11111      checkers
11111      chess
22222      chess
22222      chess
33333      monopoly
33333      monopoly
33333      monopoly
44444      chess
55555      risk
55555      chess
我想返回所有只玩国际象棋而不玩其他游戏的玩家的名字和姓氏。所以它应该回报鲍勃·哈珀和罗恩·安德森

SELECT player.firstName, player.lastName from player, appearances where player.masterID = appearances.masterID and appearances.gameName = "chess";

我有一个查询,它将返回所有曾经下过国际象棋的人,不管他们玩过其他什么游戏,但我不知道如何将它限制到只下过国际象棋的玩家。它也应该只返回一次玩家的名字。谢谢你的帮助

您只需在查询末尾添加另一个过滤器,即可过滤掉其他游戏中出现的MasterID:

SELECT player.firstName, player.lastName 
from player
join appearances on player.masterID = appearances.masterID  
where appearances.gameName = 'chess'
and masterID not in(select masterID from Appearances where gameName != 'chess')

您只需在查询末尾添加另一个过滤器,即可过滤掉其他游戏中出现的MasterID:

SELECT player.firstName, player.lastName 
from player
join appearances on player.masterID = appearances.masterID  
where appearances.gameName = 'chess'
and masterID not in(select masterID from Appearances where gameName != 'chess')

只需使用和即可获得结果,如下所示

SELECT A.firstName, A.lastName
FROM Player A LEFT JOIN Appearances B
ON A.masterID=B.masterID
GROUP BY A.firstName, A.lastName
HAVING SUM(B.gameName = 'chess')=COUNT(*);

查看它。

只需使用和即可获得结果,如下图所示

SELECT A.firstName, A.lastName
FROM Player A LEFT JOIN Appearances B
ON A.masterID=B.masterID
GROUP BY A.firstName, A.lastName
HAVING SUM(B.gameName = 'chess')=COUNT(*);

看吧。

啊,讨厌当我快写完一个答案时,“一个新答案”框弹出,我几乎是逐字逐句地输入。拥有upvote@Kevin我知道你从哪里来。谢谢。@I谢谢你的快速回答。你教会了我一些关于SQL的新知识!我将需要添加独特的,也是在最后的订单,但你的解决方案是伟大的工作!谢谢呃,讨厌当我几乎完成一个答案时,“一个新的答案”框会弹出,我几乎是逐字逐句地输入。拥有upvote@Kevin我知道你从哪里来。谢谢。@I谢谢你的快速回答。你教会了我一些关于SQL的新知识!我将需要添加独特的,也是在最后的订单,但你的解决方案是伟大的工作!谢谢我不知道SQL小提琴的存在。太好了!thanksI不知道SQL Fiddle的存在。太好了!谢谢