如何跨多个连接的行强制执行SQL连接条件?

she*_*edd 3 mysql sql

假设您有一个数据库架构,其中包含与游戏相关的锦标赛.锦标赛可能有很多比赛.

我正在尝试参加比赛,只会在未来的所有比赛中回归锦标赛.

SELECT DISTINCT tournaments.*
FROM tournaments
INNER JOIN games ON tournaments.game_id = games.id
WHERE games.event_date >= NOW();
Run Code Online (Sandbox Code Playgroud)

还有一些我正在加入的表格,但为了这个例子,我简化了它.

我的查询是拉回结果,而不是将来所有比赛中的所有比赛.

我也尝试将条件移入连接:

SELECT DISTINCT tournaments.*
FROM tournaments
INNER JOIN games ON (tournaments.game_id = games.id AND games.event_date >= NOW())
Run Code Online (Sandbox Code Playgroud)

但我得到了相同的结果.

如何确保将来返回的所有锦标赛都有游戏 - 也就是说,在所有加入的行中强制执行条件?

谢谢!

Dav*_*sta 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()
)
Run Code Online (Sandbox Code Playgroud)