如何在SQL中正确连接这四个表?

时间:2020-10-06 12:09:15

标签: mysql sql

我当前正在创建一个小型应用程序,用户可以在其中订阅不同的频道以查看相应的帖子。

我的数据库如下所示(简化): enter image description here

现在,我正在尝试从帖子表(所有列)中获取所有信息,对于与特定用户可能已订阅的任何渠道相关的所有帖子。

示例:一个用户(id_user = 0)已订阅了三个渠道(id_channel = 1、2和3),现在希望查看这些渠道中的所有帖子(每个帖子中fk_channel = 1或2或3)。 / p>

我尝试使用不同的联接进行许多变体,但是我无法找到正确的查询。我最近的尝试之一看起来像这样(不起作用...):

SELECT * FROM posts
INNER JOIN channels ON posts.fk_channel = channels.id_channel
INNER JOIN subscriptions ON channels.id_channel = subscriptions.fk_subcribed_channel
INNER JOIN users ON subscriptions.fk_subscibed_by = users.id_user

2 个答案:

答案 0 :(得分:1)

如果您具有用户ID,则无需联接表users,因为您可以使用fk_subscibed_by的列subscriptions

SELECT p.* 
FROM subscriptions s
INNER JOIN channels c ON c.id_channel = s.fk_subcribed_channel
INNER JOIN posts p ON p.fk_channel = c.id_channel
WHERE s.fk_subscibed_by = 0

如果要获取联接表的所有列,请使用SELECT *而不是SELECT p.*,后者仅返回posts中的列。

答案 1 :(得分:0)

如果您的介绍正确,那么应该可以正常工作:

SELECT * FROM posts
LEFT OUTER JOIN channel ON posts.fk_channel = channel.id_channel
LEFT OUTER subscriptions ON channel.id_channel = subscriptions.fk_subcribed_channel
LEFT OUTER users ON subscriptions.fk_subscibed_by = users.id_user

像这样,您应该能够从用户订阅的每个频道中获取每个帖子。

相关问题