[英]Mysql Joining four tables
我在将这些表链接在一起时遇到了麻烦:
表 1:比赛
ID | 姓名 | 日期 |
---|---|---|
1 | 亚当 vs 兰斯 | 2021-09-2021 |
2 | 贝克斯 vs 亚当 vs 艾丽卡 | 2021-08-2021 |
3 | 克雷格 vs 布里 | 2021-07-2021 |
4 | 丹妮尔 VS 艾伦 | 2021-06-2021 |
5 | 艾丽卡 vs 佐伊 vs AJ | 2021-05-2021 |
6 | 布里 VS 艾丽卡 | 2021-04-2021 |
7 | 布里 VS 兰斯 | 2021-03-2021 |
8 | 布里 vs 兰斯 vs 佐伊 | 2021-02-2021 |
表 2:获奖者:
ID | 姓名 | 比赛编号 | 编号 |
---|---|---|---|
1 | 亚当 | 1 | 1 |
2 | 贝克斯 | 2 | 3 |
3 | 丹妮尔 | 4 | 7 |
4 | 佐伊 | 5 | 9 |
5 | 埃里卡 | 6 | 4 |
6 | 布里 | 7 | 5 |
7 | 布里 | 8 | 5 |
表 3:输家:
ID | 姓名 | 比赛编号 | 编号 |
---|---|---|---|
1 | 槊 | 1 | 2 |
2 | 亚当 | 2 | 1 |
3 | 埃里卡 | 2 | 4 |
4 | 艾伦 | 4 | 8 |
5 | 阿杰 | 5 | 10 |
6 | 埃里卡 | 5 | 4 |
7 | 布里 | 6 | 5 |
8 | 槊 | 7 | 2 |
9 | 槊 | 8 | 2 |
10 | 佐伊 | 8 | 9 |
表 3:平局:
ID | 姓名 | 比赛编号 | 编号 |
---|---|---|---|
1 | 克雷格 | 3 | 6 |
2 | 布里 | 3 | 5 |
表 4:玩家
ID | 姓名 | 性别 |
---|---|---|
1 | 亚当 | 米 |
2 | 槊 | 米 |
3 | 贝克斯 | F |
4 | 埃里卡 | F |
5 | 布里 | F |
6 | 克雷格 | 米 |
7 | 丹妮尔 | F |
8 | 艾伦 | 米 |
9 | 佐伊 | F |
10 | 阿杰 | F |
我一直在尝试的查询是在其中查找所有与 Bree 匹配的匹配项并按日期对它们进行排序。
表 5:Output:
比赛编号 |
---|
3 |
6 |
7 |
8 |
Draw: Match ID: 3
Los: Match ID: 6
Win: Match ID: 7
Win: Match ID: 8
当我尝试对 Match 表进行内联输赢时,它可以工作,但第二次我包括平局,它不会返回任何内容。
如果我尝试只返回平局,它会起作用,但内部加入失败或获胜会导致 0 结果。
任何人都可以帮助我提供有效的代码吗?
查询我正在尝试:
SELECT Matches.ID AS MatchID, Winners.Name
FROM Matches
inner JOIN Draws
ON Matches.ID = Draws.MatchID
inner JOIN Winners
ON Matches.ID = Winners.MatchID
inner JOIN Losers
ON Matches.ID = Losers.Match ID
and (Winners.winner_id_num = 5
OR
Losers.type_id_num = 5
OR
Draws.IDNum = 5
)
GROUP BY match_id_num;
我建议您在带有结果的 3 个表之间使用UNION ,并将 output 与Matches
表连接起来。
SELECT r.Result, r.IDMatch FROM (
SELECT *, 'Win' as Result FROM Winners WHERE IDNum = 5
UNION
SELECT *, 'Los' as Result FROM Losers WHERE IDNum = 5
UNION
SELECT *, 'Draw' as Result FROM Draws WHERE IDNum = 5
) AS r
INNER JOIN Matches AS m ON m.ID = r.IDMatch
ORDER BY m.Date DESC
output 将是:
Draw 3
Los 6
Win 7
Win 8
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.