我有兩個表,說SQL JOIN得到兩條記錄的每一行
表:交易
列:SENDER_ID,receiver_id,價值
和
TABLE:Users
COLUMNS:user_id,username
是否有可能使SQL語句爲users表中的每個記錄的users表中加入兩行?因此,對於每個結果行,我應該有users表中的兩個用戶名,但有兩個不同的別名。如何實現這一目標?
謝謝
我有兩個表,說SQL JOIN得到兩條記錄的每一行
表:交易
列:SENDER_ID,receiver_id,價值
和
TABLE:Users
COLUMNS:user_id,username
是否有可能使SQL語句爲users表中的每個記錄的users表中加入兩行?因此,對於每個結果行,我應該有users表中的兩個用戶名,但有兩個不同的別名。如何實現這一目標?
謝謝
假設sender_id
和receiver_id
是對user_id
的引用,並且假設user_id
在Users
表中是UNIQUE ...是的。
加入到Users
表中兩次。
例如:
SELECT t.sender_id
, t.receiver_id
, t.value
, s.user_id AS sender_user_id
, s.username AS sender_username
, r.user_id AS receiver_user_id
, r.username AS receiver_username
FROM `Transactions` t
LEFT
JOIN `Users` s ON s.user_id = t.sender_id
LEFT
JOIN `Users` r ON r.user_id = t.receiver_id
ORDER BY 1,2,3
的查詢使用外部連接...從Transactions
的行會,如果receiver_id
或sender_id
不在Users
表相匹配的行返回。
關鍵字LEFT
可以拆下來改變這種行爲,所以如果在Users
匹配行兩個sender_id
和receiver_id
一行將只退還。
非常感謝 – Heriotza
你有正確的想法,通過談論別名。您需要兩個連接:
select us.username, ur.username, t.value
from transactions t left join
users us
on t.sender_id = us.user_id left join
users ur
on t.receiver_id = ur.receiver_id;
left join
是以防萬一的一個值不匹配。
感謝您的回覆! – Heriotza
至少提供樣本數據和所需的輸出。 –
是的,這是可能的。但是你必須自己展示研究成果。因此,請在這裏獲得更好的信息和示例。 –
[MySQL中的完全外連接]的可能重複(http://stackoverflow.com/questions/4796872/full-outer-join-in-mysql) –