Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL:选择两个以上的表_Sql - Fatal编程技术网

SQL:选择两个以上的表

SQL:选择两个以上的表,sql,Sql,我有一个SQL问题,我想知道是否有人可以帮助我。下面是数据库的模式 游戏者 playerid主键 玩家名称 PlaysAt clubId主键 playerId fk到PLAYER.playerId 年卫星俱乐部 我的问题是如何选择球员约翰和斯蒂芬所在俱乐部的俱乐部出价,而约翰和斯蒂芬在同一俱乐部效力。我不知道在这种情况下如何获得俱乐部id。我已经成功地获得了正确的连接部分,因为我能够选择john的俱乐部id,但是当我使用WHERE playerName=john和playerName=steph

我有一个SQL问题,我想知道是否有人可以帮助我。下面是数据库的模式

游戏者 playerid主键 玩家名称 PlaysAt clubId主键 playerId fk到PLAYER.playerId 年卫星俱乐部 我的问题是如何选择球员约翰和斯蒂芬所在俱乐部的俱乐部出价,而约翰和斯蒂芬在同一俱乐部效力。我不知道在这种情况下如何获得俱乐部id。我已经成功地获得了正确的连接部分,因为我能够选择john的俱乐部id,但是当我使用WHERE playerName=john和playerName=stephen指定两个球员时,我无法获得它

使用:

  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关键字,这使得查询更加简单