我有两个名为Users
的表id, name, last_name
和一个名为Messages
的{{1}}表。
我还有一个跟踪其他用户id, user_id, message
的用户的关系表格,格式为Follow
我需要从我的用户那里获取所有消息,比如用户1和来自用户1粉丝的所有消息。
我已经有一个查询,但它没有在当前用户上返回正确的名称。
我怎样才能做到这一点?下面是我的初始查询,但它不会产生正确的结果。
id, user_id, follower_user_id
示例数据:
消息:
SELECT DISTINCT Messages.content, Messages.user_id, Users.name
FROM Follow JOIN Users ON Users.id = Follow.follower_user_id
JOIN Messages ON Messages.user_id = Follow.follower_user_id
OR Messages.user_id = Follow.user_id WHERE Follow.user_id = 1
用户:
id | user_id | message
1 | 1 | I am a message
2 | 3 | Here is another message
3 | 2 | Hello there
如下:
id | name | last_name
1 | Test | Last
2 | Test2 | Last2
3 | Test3 | Last3
答案 0 :(得分:1)
我希望这样的事情:
SELECT m.content, m.user_id, u.name
FROM messages m JOIN
users u
ON m.user_id = u.id
WHERE m.user_id = 1 OR
m.user_id IN (SELECT f.follower_user_id
FROM Follow f
WHERE f.user_id = 1
);
除非有必要,否则您应该尽量避免使用SELECT DISTINCT
。
此外,您提出问题的方式,FOLLOW
中的用户列可能顺序错误(也就是说,您可能希望子查询中有f.follower_user_id = 1
。)