SQL:选择两个表

时间:2010-11-07 20:26:14

标签: sql

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

播放器

  • playerid(主键)
  • playerName

PlaysAt

  • clubId(主键)
  • playerId(fk to PLAYER.playerid)
  • yearsAtClub

我的问题是我如何选择俱乐部的clubId,其中名叫约翰和斯蒂芬的球员在约翰和斯蒂芬在同一个俱乐部比赛。在这种情况下,我不知道如何获得俱乐部ID。我已经设法让连接部分正确,因为我能够选择约翰的俱乐部ID,但是当我使用WHERE playerName = john AND playerName = stephen指定两个玩家时无法得到它。

2 个答案:

答案 0 :(得分:1)

使用:

  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子句中的COUNT匹配 - 在本例中为2。

如果 PLAYSAT.clubidPLAYSAT.playerid列上没有主键或唯一约束,DISTINCT会有所帮助如果对于相同的clubid值,“John”的条目将被视为有效。否则,可以从查询中省略DISTINCT。

答案 1 :(得分:1)

您可以使用关键字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';

这假设表Player具有主键playerId(具有大写“I”)。它不在你的代码中,但我不知道这是不是一个错字。如果您对主键和外键使用相同的名称,则可以使用using关键字,这使查询更加简单。