SQL:选择两个以上的表
我有一个SQL问题,我想知道是否有人可以帮助我。下面是数据库的模式 游戏者 playerid主键 玩家名称 PlaysAt clubId主键 playerId fk到PLAYER.playerId 年卫星俱乐部 我的问题是如何选择球员约翰和斯蒂芬所在俱乐部的俱乐部出价,而约翰和斯蒂芬在同一俱乐部效力。我不知道在这种情况下如何获得俱乐部id。我已经成功地获得了正确的连接部分,因为我能够选择john的俱乐部id,但是当我使用WHERE playerName=john和playerName=stephen指定两个球员时,我无法获得它 使用:SQL:选择两个以上的表,sql,Sql,我有一个SQL问题,我想知道是否有人可以帮助我。下面是数据库的模式 游戏者 playerid主键 玩家名称 PlaysAt clubId主键 playerId fk到PLAYER.playerId 年卫星俱乐部 我的问题是如何选择球员约翰和斯蒂芬所在俱乐部的俱乐部出价,而约翰和斯蒂芬在同一俱乐部效力。我不知道在这种情况下如何获得俱乐部id。我已经成功地获得了正确的连接部分,因为我能够选择john的俱乐部id,但是当我使用WHERE playerName=john和playerName=steph
SELECT c.clubid
FROM PLAYSAT c
JOIN PLAYER p ON p.playerid = c.playerid
WHERE p.playername IN ('john', 'stephen')
GROUP BY c.clubid
HAVING COUNT(DISTINCT p.playername) = 2
关键是in子句中的参数数量需要与HAVING子句中的计数匹配——在本例中为2
如果PLAYSAT.clubid和PLAYSAT.playerid列上都没有主键或唯一约束,则DISTINCT有助于解决此问题-如果John的两个条目具有相同的clubid值,则视为有效。否则,可以从查询中省略DISTINCT。您可以使用关键字as创建别名,将两次连接到同一个表:
select clubId
from PlaysAt
join Player as Player1 using (playerId)
join Player as Player2 using (playerId)
where Player1.playerName = 'john'
and Player2.playerName = 'stephen';
这假设table Player的主键playerId带有大写字母I。在您的代码中没有,但我无法判断这是否是一个输入错误。如果主键和外键使用相同的名称,则可以利用using关键字,这使得查询更加简单