我正在研究一个涉及3个不同表的SQL语句。下面你可以看到它们的结构,每个都有一个示例数据。
首先,我想显示用户关注的人的所有消息。我使用了这个查询:
SELECT *
FROM Messages
LEFT JOIN Followers ON Followers.following=Messages.user
WHERE Followers.user = 'Peter Jackson'
这导致了这个:
它正在发挥作用。但是,在下一步中,我应该为其添加一个自定义列,这必须是“已经被删除”。这应该检查用户是否已经喜欢该消息。值必须为“是”或“否”。因此,需要有关Likes-table的信息。我想我应该再次加入'Likes.idmessage'和'Messages.id'。但我不知道如何给它一个值'是'或'不'。最后,它应该是这样的:
在服务器端,我使用Node.js和客户端AngularJS。
答案 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运算符来检查每一行是否有类似表中的任何字段是否为空。