mysql - SQL合并三张表的数据

标签 mysql sql join

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

enter image description here

  1. FOLLOWERS-TABLE:此表包含有关当前用户('user')关注另一个用户('following')的信息
  2. MESSAGES:该表包含有关某个用户的消息的信息
  3. LIKES:此表包含有关谁喜欢其他消息的信息。 'idmessage' 与消息表中的 'id' 相同

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

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

这导致了这个:

enter image description here

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

在服务器端,我使用 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/

相关文章:

MySQL 索引不用于 LIKE for INT?

mysql - 如何在MySql中选择与一列中的值匹配而与另一列中的值不匹配的记录?

Mysql最大行数

mysql - 如果多个表中不存在该行,则插入该行

mysql - 同一查询中的 update 和 2 select 语句导致错误

sql - 是否可以向外键添加逻辑约束?

mysql - 使用 JOIN USING 查询时出错

mysql - SQL连接多行

php - 如何在 PHP 的 while 循环中分割返回的结果

php - Wordpress站点发布管理策略