我在这里提出的问题可能看起来很傻,但它让我有点抓狂,因为我不明白 MySQL 连接是如何工作的。
我有 2 张桌子:
user;
+--------------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+--------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(128) | NO | | NULL | |
+--------------------+--------------+------+-----+---------+-------+
game;
+--------------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+--------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| source_id* | int(11) | NO | | NULL | |
| target_id* | int(11) | NO | | NULL | |
+--------------------+--------------+------+-----+---------+-------+
game.source_id
并且game.target_id
是引用user.id
.
现在我想从game
表中选择所有内容,并且我想在结果中包含 2 个用户的名称,因为game
有 2 个用户。我希望这些列被命名为target_name
和source_name
具体。
试过这个查询:
SELECT
g.id,
u.name
FROM
game g
RIGHT JOIN
user u
ON
u.id = g.source_id
OR
u.id = g.target_id
WHERE
g.source_id = 1
OR
g.target_id = 1
;
但正如您可能已经注意到的那样,我没有别名u.name
为target_name
orsource_name
因为我不知道如何做到这一点,最终结果如下所示:
+----+------+
| id | name |
+----+------+
| 1 | bo |
| 1 | al |
| 2 | jo |
| 2 | jay |
+----+------+
如您所见,game
结果中出现了多次。
预期结果:
+----+-------------+-------------+
| id | target_name | source_name |
+----+-------------+-------------+
| 1 | bo | al |
| 2 | jo | jay |
+----+-------------+-------------+
提前致谢。