我在这里提出的问题可能看起来很傻,但它让我有点抓狂,因为我不明白 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         |
+----+-------------+-------------+
提前致谢。