我正在处理一个涉及 3 个不同表的 SQL 语句。您可以在下面看到它们的结构,每个都有一个示例数据。
- FOLLOWERS-TABLE:此表包含有关当前用户('user')关注另一个用户('following')的信息
- MESSAGES:该表包含有关某个用户的消息的信息
- LIKES:此表包含有关谁喜欢其他消息的信息。 'idmessage' 与消息表中的 'id' 相同
首先,我想显示用户关注的人的所有消息。我使用了这个查询:
SELECT *
FROM Messages
LEFT JOIN Followers ON Followers.following=Messages.user
WHERE Followers.user = 'Peter Jackson'
这导致了这个:
它正在工作。但是,在下一步中我应该向它添加一个自定义列,这必须是“已经喜欢”。这应该检查用户是否已经喜欢该消息。该值必须是"is"或“否”。因此,需要有关 Likes 表的信息。我想我应该再次加入“Likes.idmessage”和“Messages.id”。但我不知道如何给它一个值"is"或“否”。最后应该是这样的:
在服务器端,我使用 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 表中的字段将为空。然后我们使用 case 运算符检查每一行,如果 like 表中的任何字段为空或不为空。
关于mysql - SQL合并三张表的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48083882/