我有一个SQL问题,我想知道是否有人可以帮助我。以下是数据库的架构
我的问题是我如何选择俱乐部的clubId,其中名叫约翰和斯蒂芬的球员在约翰和斯蒂芬在同一个俱乐部比赛。在这种情况下,我不知道如何获得俱乐部ID。我已经设法让连接部分正确,因为我能够选择约翰的俱乐部ID,但是当我使用WHERE playerName = john AND playerName = stephen指定两个玩家时无法得到它。
答案 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.clubid
和PLAYSAT.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
关键字,这使查询更加简单。