【发布时间】:2018-08-07 09:44:49
【问题描述】:
这个问题有点复杂,因为在一个 SQL 查询中混合了 4 个表。我已经开发了查询,但它仍然返回与预期不同的行数。
用户
id_user | name
1 A
2 B
3 C
4 D
5 E
社区
id_following | id_follower | id_followed
1 3 4
2 3 5
分享
id_share | id_post_shared | id_sharer | id_user_post
1 7 5 1
2 8 4 2
3 9 5 4
帖子
id_post | id_user_post | post
1 4 Hi
2 5 Hello
3 2 Hey you
4 3 come on
5 4 here is good
6 5 go home
7 1 lets go home
8 2 go away
9 4 come here
10 1 show
我想检索我关注的用户(用户 3)的帖子以及我关注的同一个人与其他人分享的帖子(如转发)。
所以从表格中我希望得到这个输出(8 个结果)
1 4 Hi
2 5 Hello
5 4 here is good
6 5 go home
7 1 lets go home (shared by 5)
8 2 go away (shared by 4)
9 4 come here (shared by 5)
9 4 come here
(意识到#9 重复,因为这是我关注的某人的帖子,同时被用户 5 分享或转发)
这是我的代码,但经过几次测试后,我不确定我想要的内容是否遵循这种模式
SELECT
u.name AS n, p.post AS t
FROM
users AS u
LEFT JOIN
community AS c ON u.id_user = c.id_followed
LEFT JOIN
sharing AS r ON r.id_sharer = c.id_followed
LEFT JOIN
posts AS p ON p.id_user = c.id_followed OR p.id_user = r.id_sharer
WHERE
c.id_follower = 3
AND p.id_user != 3
【问题讨论】:
-
"posts AS p ON p.id_user = c.id_followed OR p.id_user = r.id_sharer" 不会带回所有帖子,因为它左加入社区和共享表。 >
-
我应该改用什么