[英]How do I enforce SQL join conditions across multiple joined rows?
假設您有一個數據庫架構,其中包含與游戲相關的錦標賽。 錦標賽可能有很多比賽。
我正在嘗試參加比賽,並且只會在未來的所有比賽中回歸錦標賽。
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())
但我得到了相同的結果。
如何確保將來返回的所有錦標賽都有游戲 - 也就是說,在所有加入的行中強制執行條件?
謝謝!
我不確定這個確切的查詢是否適合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()
)
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())
也許是這樣的:
SELECT DISTINCT t.*
FROM tournaments t, (select id, event_date from games where event_date >= now() ) g
where t.game_id = g.id
試試這個
SELECT DISTINCT *
FROM tournaments
where game_id in (
Select id from games where event_date >= NOW()
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.