[英]two joins on same two tables
我有这两张桌子。 我想加入这两个表和real_name
从我的player
有桌子playerA
和playerB
在我的match
表。 所以我尝试了这个。 不幸的是,当我尝试此操作时,我的比赛从46k记录增加到超过一百万条记录,因此我知道这不能正常工作。
SELECT players.player_id, players.real_name, matches.playerA, matches.playerB, matches.scoreA, matches.scoreB
FROM players
JOIN matches ON players.player_id = matches.playerA
JOIN matches m1 ON players.player_id = m1.playerB;
+----------+---------+---------+
| match_id | playerA | playerB |
+----------+---------+---------+
| 1 | 4 | 55 |
| 2 | 2 | 41 |
| 3 | 21 | 41 |
| 4 | 3 | 2 |
| 5 | 41 | 2 |
| 6 | 21 | 3 |
| 7 | 1 | 8 |
| 8 | 1 | 8 |
| 9 | 8 | 19 |
| 10 | 19 | 12 |
+----------+---------+---------+
+-----------+-----------------+
| player_id | real_name |
+-----------+-----------------+
| 1 | Dong Nyoung Lee |
| 2 | Hyun Woo Jang |
| 3 | Seung Hyun Lee |
| 4 | Soo Ho Park |
| 5 | Lee Sak Won |
| 6 | Young Suh Yoon |
| 7 | Yoon Jong Jung |
| 8 | Dong Hwan Kim |
| 9 | Tae Hoon Kwon |
| 10 | Ilyes Satouri |
+-----------+-----------------+
我添加了要求的内容。
+-----------+------------------------------------+---------+---------+--------+--------+
| player_id | real_name | playerA | playerB | scoreA | scoreB |
+-----------+------------------------------------+---------+---------+--------+--------+
| 4 | Soo Ho Park | 4 | 55 | 1 | 3 |
| 4 | Soo Ho Park | 4 | 55 | 1 | 3 |
| 4 | Soo Ho Park | 4 | 55 | 1 | 3 |
| 4 | Soo Ho Park | 4 | 55 | 1 | 3 |
| 4 | Soo Ho Park | 4 | 55 | 1 | 3 |
| 4 | Soo Ho Park | 4 | 55 | 1 | 3 |
| 4 | Soo Ho Park | 4 | 55 | 1 | 3 |
| 4 | Soo Ho Park | 4 | 55 | 1 | 3 |
| 4 | Soo Ho Park | 4 | 55 | 1 | 3 |
| 4 | Soo Ho Park | 4 | 55 | 1 | 3 |
| 4 | Soo Ho Park | 4 | 55 | 1 | 3 |
| 4 | Soo Ho Park | 4 | 55 | 1 | 3 |
| 4 | Soo Ho Park | 4 | 55 | 1 | 3 |
| 4 | Soo Ho Park | 4 | 55 | 1 | 3 |
| 4 | Soo Ho Park | 4 | 55 | 1 | 3 |
| 4 | Soo Ho Park | 4 | 55 | 1 | 3 |
如果您打算排行/匹配,我相信您想要的是这样的:
SELECT p1.player_id, p1.real_name, p2_player_id, p2_player_name,
m.scoreA, m.scoreB
FROM matches m
JOIN players p1 ON p1.player_id = m.playerA
JOIN players p2 ON p2.player_id = m.playerB
照原样,对于表“ match”中的每个配对,您将获得每个参与比赛的玩家1的行乘以每个参与比赛的运动员2的行。
显示以前运行的查询以及要显示的数据将很有帮助。
您的查询当前正在做的是,对于每个玩家,从他们作为玩家A的每个比赛中加载行,然后从他们作为玩家B的每个比赛中加载行。由于SQL不会“排队”这两个联接,而是交叉乘以它们(即生成它们的每种组合),您可能会为每个玩家ID生成许多行。
如果您要查找的是具有参与者全名和分数的匹配ID表,则该表看起来更像这样:
select m.match_id, pA.full_name, m.scoreA, pB.full_name, m.scoreB from matches m join players pA on pA.player_id = m.playerA join players pB on pB.player_id = m.playerB
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.