从关系表中获取2个不同表中的数据

时间:2017-06-18 14:07:30

标签: mysql sql

我有两个名为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

1 个答案:

答案 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。)