簡體   English   中英

如何跨多個連接的行強制執行SQL連接條件?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM