Left基于两个不同的字段加入同一个表?

时间:2014-08-23 06:56:37

标签: mysql left-join

我有两张桌子......

SELECT * FROM posts  
post_id | user_id | timestamp | feed_id | content

SELECT * FROM users  
user_id | username | display_name

我有以下MySQL查询来获取帖子并LEFT JOIN发布它的相应用户信息...然后按发布的时间戳对帖子进行排序。

SELECT posts.*, users.* FROM `posts` LEFT JOIN `users` ON posts.user_id=users.user_id ORDER BY `timestamp` DESC LIMIT 0, 15

现在,posts.feed_id将为NULL,这是一个“常规帖子”,但它也可以是另一个user_id,这是一个针对该用户的帖子。

如何在posts.feed_id=users.user_id

上添加另一个JOIN语句以获取该用户信息(如果可用)

类似的东西(但不是这样,这不能得到我想要的东西):

SELECT posts.*, users.* FROM `posts` LEFT JOIN `users` ON posts.user_id=users.user_id AND posts.feed_id=users.user_id ORDER BY `timestamp` DESC LIMIT 0, 15

我确定我必须相应地对信息进行别名,但我似乎根本无法找回它

1 个答案:

答案 0 :(得分:2)

使用不同的别名加入两次:

SELECT posts.*, source.*, target.*
FROM `posts` 
LEFT JOIN `users` as source ON posts.user_id=source.user_id
LEFT JOIN `users` as target on posts.feed_id=target.user_id
ORDER BY `timestamp` DESC LIMIT 0, 15

您可能希望明确列出列而不是source.*target.*,以便为它们指定不同的名称。