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

Mysql 如何在SQL中正确连接这四个表?,mysql,sql,Mysql,Sql,我目前正在创建一个小应用程序,用户可以订阅不同的频道来查看相应的帖子 我的数据库如下所示(简化): 现在,我试图从post表(所有列)中获取所有信息,这些信息是连接到特定用户可能订阅的任何频道的所有post的信息 示例:一个用户(id_user=0)已订阅了三个频道(id_channel=1、2和3),现在希望查看这些频道中的所有帖子(其中fk_channel=1或2或3的每个帖子) 我尝试了许多使用不同联接的变体,但是我无法找到正确的查询。我最后的一次尝试看起来像这样(不起作用…): 如果您

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

我的数据库如下所示(简化):

现在,我试图从post表(所有列)中获取所有信息,这些信息是连接到特定用户可能订阅的任何频道的所有post的信息

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

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


如果您的演示是正确的,这应该可以正常工作:

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

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

如果您有用户id,则无需加入表
users
,因为您可以通过
订阅的
使用列
fk\u subscibed\u

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
中的列,最终输出是什么样子的?此外,该表似乎是频道而不是频道。请参阅:
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