我有两张桌子,一张是游戏,一张是参与者。
游戏可以有多个参与者。现在我需要搜索是否已插入游戏。我使用内部联接进行了查询。
SELECT game.gameId
FROM game
INNER JOIN participants
WHERE game.gameId = participants.gameId
AND participants.name = 'Team1'
AND participants.name = 'Team2'
这不符合我的预期,有没有办法在一个查询中检查第1组和第2组之间是否匹配?
谢谢!
修改
tablelayout:
**game**
PK gameId
date
**participants**
PK id
FK gameId
name
type //home or visiting
答案 0 :(得分:8)
以下内容应该有效。它将使用gameID加入游戏和参与者,并确保名称为Team1和Team2。这假设参与者对于游戏来说是多对多的,并且每场比赛只有两个团队。
SELECT participants.gameId
FROM game
JOIN participants
ON game.gameId = participants.gameId
WHERE participants.name = 'Team1'
OR participants.name = 'Team2'
GROUP BY participants.gameID
HAVING COUNT(*) = 2
答案 1 :(得分:3)
你不是试图将游戏与参与者联系起来,而是将参与者与自身联系起来。
select
p1.gameId
from
participants as p1, participants as p2
where
p1.name = 'Team1' and p2.name='Team2' and p1.gameId = p2.gameId
答案 2 :(得分:1)
您需要与参与者表一起加入两次:
SELECT game.gameId
FROM game
INNER JOIN participants p1
ON game.gameId = p1.gameID
INNER JOIN participants p2
ON game.gameId = p2.gameID
WHERE (p1.name = 'Team1' AND p2.name = 'Team2')
OR (p2.name = 'Team1' AND p1.name = 'Team2')