如何在内部联接上搜索多个值

时间:2010-11-04 15:04:40

标签: sql mysql

我有两张桌子,一张是游戏,一张是参与者。

游戏可以有多个参与者。现在我需要搜索是否已插入游戏。我使用内部联接进行了查询。

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

3 个答案:

答案 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')