在SQL中组合三个表的数据

时间:2018-01-03 19:24:58

标签: mysql sql join

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

enter image description here

  1. FOLLOWERS-TABLE :此表包含有关当前用户('user')跟随其他用户的信息('follow')
  2. 消息:此表包含有关特定用户的消息的信息
  3. LIKES :此表包含有关谁喜欢其他邮件的信息。 'idmessage'与Messages-table
  4. 中的'id'相同

    首先,我想显示用户关注的人的所有消息。我使用了这个查询:

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

    这导致了这个:

    enter image description here

    它正在发挥作用。但是,在下一步中,我应该为其添加一个自定义列,这必须是“已经被删除”。这应该检查用户是否已经喜欢该消息。值必须为“是”或“否”。因此,需要有关Likes-table的信息。我想我应该再次加入'Likes.idmessage'和'Messages.id'。但我不知道如何给它一个值'是'或'不'。最后,它应该是这样的: enter image description here

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

1 个答案:

答案 0 :(得分:1)

如果我理解正确,那么这应该有效:

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表中的字段将为null。然后我们使用case运算符来检查每一行是否有类似表中的任何字段是否为空。