Mysql 在SQL中组合三个表的数据

Mysql 在SQL中组合三个表的数据,mysql,sql,join,Mysql,Sql,Join,我正在编写一个SQL语句,它将涉及3个不同的表。下面您可以看到它们的结构,每个结构都有一个示例数据 FOLLOWERS-TABLE:此表包含当前用户(“用户”)跟随另一用户(“跟随”)的信息 消息:此表包含有关特定用户消息的信息 喜欢:此表包含关于谁喜欢其他邮件的信息。”idmessage'与Messages表中的'id'相同 首先,我想显示用户关注的人的所有消息。我使用了这个查询: SELECT * FROM Messages LEFT JOIN Followers ON Fo

我正在编写一个SQL语句,它将涉及3个不同的表。下面您可以看到它们的结构,每个结构都有一个示例数据

  • FOLLOWERS-TABLE:此表包含当前用户(“用户”)跟随另一用户(“跟随”)的信息
  • 消息:此表包含有关特定用户消息的信息
  • 喜欢:此表包含关于谁喜欢其他邮件的信息。”idmessage'与Messages表中的'id'相同
  • 首先,我想显示用户关注的人的所有消息。我使用了这个查询:

    SELECT * 
    FROM Messages 
         LEFT JOIN Followers ON Followers.following=Messages.user 
    WHERE Followers.user = 'Peter Jackson'
    
    这导致:

    它正在工作。但是,在下一步中,我应该向其中添加一个自定义列,它必须是“alreadyLiked”。这应该检查用户是否已经喜欢该消息。该值必须为“是”或“否”。因此,需要关于Likes表的信息。我想我应该在“Likes.idmessage”和“Messages.id”上再加入一个。但我不知道如何给它一个“是”或“否”的值。最后,应该是这样的:


    在服务器端,我使用Node.js和客户端AngularJS。

    如果我理解正确,那么这应该可以:

    SELECT Messages.*,  Followers.*, 
    CASE WHEN Likes.id IS NOT NULL THEN 'yes' ELSE 'no' END AS alreadyLiked
    FROM Messages 
    LEFT JOIN Followers ON Followers.following=Messages.user 
    LEFT JOIN Likes ON Likes.idmessage = Messages.id
    WHERE Followers.user = 'Peter Jackson'
    

    这种方式的工作原理是只需左键加入Likes表即可。现在,如果在消息表和like表之间没有找到链接,那么like表中的字段将为null。然后,我们使用case运算符检查每一行,看like表中的任何字段是否为null。

    设置直接索引和设置forigen键将帮助您的数据库更好地工作,更高效。可能的重复请阅读重复链接文章,这与该问题完全相同。aswer:在SQL中设置一个标志。我不知道3个表的解决方案的语法是什么。“c”和“d”来自哪里?