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

问题描述:

我有两个表,一个名为Users,有id, name, last_name和一个名为Messages的表具有id, user_id, message从关系表中的两个不同表中获取数据

我也有一个关系表,以跟随其他用户Follow用户,在id, user_id, follower_user_id

我需要把所有从我的用户的邮件的形式,可以说,用户1,所有来自用户1的消息追随者。

我已经有一个查询,但它没有返回当前用户的正确名称。

我该如何做到这一点?下面是我最初的查询,但它不会产生正确的结果。

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 

如下:

id | user_id | follower_user_id 
1 |  1  | 2 
2 |  1  | 3 
3 |  3  | 1 
+0

编辑您的问题,并提供样本数据和期望的结果。 –

我希望是这样的:

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在子查询中)。