我在這裏得到的問題可能看起來很愚蠢,但是這讓我有點瘋狂,因爲我無法得到MySQL連接的工作方式。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
或source_name
,因爲我不知道該怎麼做,最終的結果看起來是這樣的:
+----+------+
| id | name |
+----+------+
| 1 | bo |
| 1 | al |
| 2 | jo |
| 2 | jay |
+----+------+
正如你所看到的,在結果中出現了多個game
。
預期的結果:
+----+-------------+-------------+
| id | target_name | source_name |
+----+-------------+-------------+
| 1 | bo | al |
| 2 | jo | jay |
+----+-------------+-------------+
在此先感謝。
謝謝。這也起作用。這是否意味着每次連接都會通過'用戶表'運行兩次? –
是的,但它會很快,因爲定義該關係的那些鍵已經是索引。 –
感謝您對COALESCE的額外信息。但是,如果我添加了'WHERE'子句,那麼我不需要它(「COALESCE」),因爲如果沒有'source_id'或'target_id',遊戲就無法存在? –