簡體   English   中英

引用子查詢JOIN中的外部查詢

[英]Reference to outer query in subquery JOIN

我在這里呼吁MySQL戰士。 我的問題是我需要在子查詢的左外部聯接中使用對外部查詢表的引用。 我知道這是不可能的,但是我不知道如何用外部查詢中的典型聯接替換子查詢過濾。

我將以一個典型的例子來說明我的問題。

這是奧運會,我有幾支球隊(比如乒乓球隊),其中有1到N名球員。 當所有隊員都與對方球隊的所有隊員對戰時,兩隊之間的比賽結束。 簡而言之,我有3張桌子:

Team (id, country); 
Player (id, team_id, name) 
Game (id, playerA_id, playerB_id).

我想搜索所有對所有反對球隊的球員(以及顯然不在我球隊中的球員)沒有對每場比賽提出異議的球員。 這是我的查詢:

SELECT t.*, p.*
FROM player p
INNER JOIN team t ON t.id = p.team_id AND t.id != My_Team_ID
WHERE EXISTS (
    -- If an opposing team's player has played no game => game.id is NULL
    -- If he hasn't played against all of my teammates => there will be at least one row where game.id is NULL
    SELECT *
    FROM player
    INNER JOIN team ON team.id = player.team_id AND team.id = My_Team_ID
    LEFT OUTER JOIN game ON player.id IN (game.playerA_id, game.playerB_id) AND p.id IN (game.playerA_id, game.playerB_id)
    WHERE game.id IS NULL
)

我出於實際目的放置了轉儲文件: http : //pastebin.com/HW3L5ukz我試圖將LEFT OUTER JOIN的第二個條件放在子查詢的WHERE中,但它沒有返回正確的結果。

關於如何實現這一點的任何想法? 提前致謝

SELECT p1.*, p2.*
FROM player p1
JOIN team t1
  ON t1.id = p1.team_id AND t1.id = My_Team_ID
LEFT JOIN player p2
  ON p2.id != p1.id
JOIN team t2
  ON t2.id = p2.team_id AND t2.id != My_Team_ID
LEFT JOIN game g1
  ON (g1.playerA_id = p1.id OR g1.playerB_id = p1.id)
  AND (g1.playerA_id = p2.id OR g1.playerB_id = p2.id)
WHERE g1.id IS NULL

如果將1用作My_Team_ID,則會得到以下結果,其中顯示了剩余的匹配項:

id  team_id name            id  team_id     name
1   1       Laurent Dupuis  6   2           Alec Russell
2   1       Stéphane Leroy  6   2           Alec Russell
3   1       Julien le Guen  4   2           Mark Johnsson
3   1       Julien le Guen  6   2           Alec Russell

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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