2011-10-19 58 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应该只选择所需的列,从不* –

相关问题