2011-10-19 60 views
0

我需要解決以下查詢:如何左的連接上不同的行同桌在一個查詢

SELECT * 
FROM message_treads 
LEFT JOIN usernames ON usernames.uid=message_treads.uid_1 
LEFT JOIN usernames ON usernames.uid=message_treads.uid_2 

我知道我應該使用別名,但我不知道如何在這裏做到這一點。當一張桌子只有一個左連接時,我知道該怎麼做,但當有多個連接時,怎麼辦?

回答

2

你是正確的,你需要使用別名,像這樣:

SELECT * 
FROM message_treads 
LEFT JOIN usernames uid1 ON uid1.uid=message_treads.uid_1 
LEFT JOIN usernames uid2 ON uid2.uid=message_treads.uid_2 
3

你可以這樣做:

SELECT * 
FROM message_treads 
LEFT JOIN usersnames ON usernames.uid IN (message_treads.uid_1, message_tread.uid_2) 

至於走樣,你會做這樣的:

SELECT * 
FROM message_treads 
LEFT JOIN usernames AS user1 ON user1.uid = message_treads.uid_1 
LEFT JOIN usernames AS user2 ON user2.uid = message_treads.uid_2 

但是這可能不是你想要的,因爲這將返回兩套來自加倍用戶名錶格的列。上面的第一個版本將只返回一組用戶名列。

+0

這可能是他們想要的東西,如果有,每個消息相關聯的兩個不同的用戶(比如,發送者和接收者)。 –

+0

我更喜歡ts答案,使用「AS」使它更具可讀性。我想補充說OP應該只選擇所需的列,從不* –

相關問題