2015-06-27 64 views
-1

我有兩個表,說SQL JOIN得到兩條記錄的每一行

表:交易

列:SENDER_ID,receiver_id,價值

TABLE:Users

COLUMNS:user_id,username

是否有可能使SQL語句爲users表中的每個記錄的users表中加入兩行?因此,對於每個結果行,我應該有users表中的兩個用戶名,但有兩個不同的別名。如何實現這一目標?

謝謝

+1

至少提供樣本數據和所需的輸出。 –

+0

是的,這是可能的。但是你必須自己展示研究成果。因此,請在這裏獲得更好的信息和示例。 –

+0

[MySQL中的完全外連接]的可能重複(http://stackoverflow.com/questions/4796872/full-outer-join-in-mysql) –

回答

0

假設sender_idreceiver_id是對user_id的引用,並且假設user_idUsers表中是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_idsender_id不在Users表相匹配的行返回。

關鍵字LEFT可以拆下來改變這種行爲,所以如果在Users匹配行兩個sender_idreceiver_id一行將只退還。

+0

非常感謝 – Heriotza

0

你有正確的想法,通過談論別名。您需要兩個連接:

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是以防萬一的一個值不匹配。

+0

感謝您的回覆! – Heriotza