mysql - 如果使用 SQL 某些表中存在行,则更新表行

标签 mysql sql

我有sql查询:

SELECT COUNT(*) AS c 
FROM plan_acl 
WHERE plan_id = (SELECT id 
                 FROM plan 
                 WHERE unicateHash = '2xxxxxxxxxxxxMcxXqZoydkOltnadm1Uf' LIMIT 1)

返回 c 作为计数。像这样:

c = 1

c = 0

如果c = 1,我想要更新表。我怎样才能做到这一点?

我尝试:

SELECT IF(SELECT COUNT(*) AS c 
          FROM plan_acl 
          WHERE plan_id = (SELECT id 
                           FROM plan 
                           WHERE unicateHash = '2xxxxxxxxxxxxMcxXqZoydkOltnadm1Uf' LIMIT 1).c = 1, "YES", "NO");

但是我收到错误。

出了什么问题?

最佳答案

如果你想更新表格,你可以使用如下语法:

UPDATE plan_acl a
    SET isActive = 0
    WHERE EXISTS (SELECT 1
                  FROM plan p
                  WHERE p.id = a.plan_id AND p.unicateHash = '2xxxxxxxxxxxxMcxXqZoydkOltnadm1Uf' 
                );

请注意,使用 limit 1= 的方法几乎执行相同的操作,但 EXISTS 内置于 SQL 语言中,用于正是测试表中是否存在行的目的。

关于mysql - 如果使用 SQL 某些表中存在行,则更新表行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49632408/

相关文章:

SQL 服务器 : get all previous values that are within half year of a month (not in future)?

mysql - 选择到/插入 SQL Server 查询重复项

java - 同时使用 INSERT INTO 和 UPDATE - JAVA SQL

php - 更新另一个表上的特定表字段

php - 从外键数量可变的 MySQL 数据库中获取行。

sql - 使用大于运算符和 ORDER BY 的 MySQL 查询的索引帮助

mysql - 再次mysql "count distinct"

MySQL 字符串函数

php - Laravel DB mysql 选择数组中列的位置?

sql - 如何在 SQL Server 中查询大于特定日期的所有日期?