mysql - SQL:如果某种记录不在同一个表中,则更新一条记录

标签 mysql sql

仅当表中不存在某条记录时,我才想更新某条记录。

我尝试了类似于以下的 SQL。

update mytable
     set val = 'someval'
     where id = 'someid' and
           0 = (select count(*) from mytable where col='val2');

失败并出现以下错误。

您不能在 FROM 子句中指定要更新的目标表“mytable”

只有一个进程正在更新此表,因此无需保留操作的原子性。

我知道我可以使用两个 SQL 查询来做到这一点,但是有没有办法在单个查询中做到这一点?

最佳答案

因为您指的是同一个表,所以最好的方法是使用 LEFT JOIN:

update mytable t left join
       mytable t2
       on t2.col = 'val2'
    set val = 'someval'
    where t.id = 'someid' and t2.col is null;

关于mysql - SQL:如果某种记录不在同一个表中,则更新一条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39381125/

相关文章:

mysql - 如何在 MySQL 中为数据库用户定义 SQL 查询白名单?

sql - 每 3 行生成行号

php - 从数据库创建的动态 ical 不起作用

php - Textarea 没有在 php 中显示。什么是错误?

mysql - 带有 IN 子句的案例

SQL Server 删除脚本顺序

c# - 按照 IN 的顺序对 SQL Query 进行排序

javascript - JavaScript 不可预测的行为

mysql - MySQL中是否可以按多列(OR语句)进行分组?

sql - PostgreSQL 中数组是否全部为 NULL