我在这里提出的问题可能看起来很傻,但它让我有点抓狂,因为我不明白 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_nameorsource_name因为我不知道如何做到这一点,最终结果如下所示:
+----+------+
| id | name |
+----+------+
| 1 | bo |
| 1 | al |
| 2 | jo |
| 2 | jay |
+----+------+
如您所见,game结果中出现了多次。
预期结果:
+----+-------------+-------------+
| id | target_name | source_name |
+----+-------------+-------------+
| 1 | bo | al |
| 2 | jo | jay |
+----+-------------+-------------+
提前致谢。