mysql - 在MySQL中根据另一个表的内容选择 bool 值

标签 mysql sql

我有下表:

Name: Posts

Id Creator Title Body Tags Time
1  1       Test  Test Test 123456789

Name: Action

Id Creator Type Target
1  1       like 1
2  3       like 1
3  2       like 1
4  1       delete 1

我想返回第一个表中的所有值和一个 bool 值,说明另一个表中是否有记录 WHERE Type='delete'

第二个表中的 Target 字段对应于第一个表中的 Id

我有以下查询(不起作用)。一方面,它为操作表中的每个相应行返回该行的实例,即使对于“删除”以外的操作也是如此。

SELECT `Posts`.*, IF(`Action`.`Type`='deleted',1,0) AS "Deleted" 
FROM `Posts` JOIN 
     `Action` ON `Action`.`Target` = `Posts`.`Id` 
ORDER BY `Id` DESC;

我不希望为 Type='like' 或除 Type='delete' 之外的任何其他表返回第一个表中行的多个副本。

我想要的示例结果:

Id Creator Title Body Tags Time Deleted
1  1       Test  Test Test 123456789 1

我希望这是有道理的,对于这么长的问题/解释我深表歉意。

最佳答案

SELECT Posts.*, IF(Action.Id IS NULL,0,1) as Deleted 
FROM Posts 
LEFT JOIN Action 
ON Action.Target = Posts.Id and Type='delete'

如果你不关心性能

SELECT Posts.*,
       exists
  (SELECT 1
   FROM Action
   WHERE Target = Posts.Id
     AND TYPE='delete') AS Deleted
FROM Posts

关于mysql - 在MySQL中根据另一个表的内容选择 bool 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23453564/

相关文章:

mysql - MySQL 5.1 存储过程中的错误

mysql - 将数据从一个 MYSQL 表导入另一个表——第一个表的行数与第二个表的行数不同

mysql - 如何优化这个复杂的查询?

SQL删除同时检查另一个表中的数据

sql - 多次计算同一列,已分组

mysql - 如何将多个查询的结果合并为一个结果

php - 使用 SQL 仅计算最近的行

mysql - 在 MySQL 数据库中搜索替换查询

SQL查询查找缺失的连续数字

sql - MySQL Blob 到文本(数据和数据类型)