从关系表中的两个不同表中获取数据
问题描述:
我有两个表,一个名为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
答
我希望是这样的:
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
在子查询中)。
编辑您的问题,并提供样本数据和期望的结果。 –