假设您有一个数据库架构,其中包含与游戏相关的锦标赛。锦标赛可能有很多比赛。
我正在尝试参加比赛,并且只会在未来的所有比赛中退出锦标赛。
SELECT DISTINCT tournaments.*
FROM tournaments
INNER JOIN games ON tournaments.game_id = games.id
WHERE games.event_date >= NOW();
还有一些我正在加入的表格,但为了这个例子,我简化了它。
我的查询结果显示,未来锦标赛中的所有比赛都不会结束。
我也尝试将条件移入连接:
SELECT DISTINCT tournaments.*
FROM tournaments
INNER JOIN games ON (tournaments.game_id = games.id AND games.event_date >= NOW())
但我得到的结果相同。
如何确保将来返回的所有锦标赛都有游戏 - 也就是说,在所有加入的行中强制执行条件?
谢谢!
答案 0 :(得分:5)
我不确定这个确切的查询是否适合MySQL。但是这个想法应该有效 - 对于每场锦标赛,确定最早的比赛日期,并且只返回比该日期更大的锦标赛。
SELECT * from tournaments
WHERE id IN
( SELECT tournaments.id
FROM tournaments INNER JOIN games ON tournaments.game_id = games.id
GROUP BY tournaments.id
HAVING MIN(games.event_date) >= now()
)
答案 1 :(得分:1)
SELECT DISTINCT tournaments.*
FROM tournaments
INNER JOIN games
ON tournaments.game_id = games.id
AND games.event_date >= NOW()
WHERE NOT EXISTS (SELECT NULL FROM games g2 WHERE g2.id = tournaments.game_id AND g2.event_date < NOW())
答案 2 :(得分:0)
可能是这样的:
SELECT DISTINCT t.*
FROM tournaments t, (select id, event_date from games where event_date >= now() ) g
where t.game_id = g.id
答案 3 :(得分:0)
试试这个
SELECT DISTINCT *
FROM tournaments
where game_id in (
Select id from games where event_date >= NOW()
)