MySQL 多行更新查询

标签 mysql sql

我需要更新我的数据库,它是基于 locationId 的多行软删除

update device d
set d.deleteDate='2016-05-07'
where d.id in (select dtg.deviceId from devicestogroups dtg
               where dtg.groupId in (select g.id from `group` g
                                     where g.locationId ='1'));

当我运行查询时出现错误:

Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnect.

据我所知,子查询将返回 2 条记录,因为子查询返回两条记录更新不会发生,但我该如何解决这个问题。我试图解决但没有成功。

最佳答案

试试这个,使用 join 而不是带 IN 的子查询会更好:

UPDATE device d
INNER JOIN devicestogroups dtg ON dtg.deviceId = d.id
INNER JOIN `group` g ON g.id = dtg.groupId
    AND g.locationId ='1'
SET d.deleteDate='2016-05-07'

UPDATE device d
INNER JOIN devicestogroups dtg ON dtg.deviceId = d.id
INNER JOIN `group` g ON g.id = dtg.groupId
SET d.deleteDate='2016-05-07'
WHERE g.locationId ='1'

关于MySQL 多行更新查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40973355/

相关文章:

php - 根据原始SQL结果获取额外数据

php - 如何使用php重新排列以下数据?

php - 4D 为 PHP 连接 MySQL 设置用户名和密码

php - MySQL 未返回正确的井号

mysql - 使用 sql 将大型 csv 文件导入 phpmyadmin 时出现问题

php - mysql数据检索只返回一行

javascript - 添加到购物车添加第一项

PHP7,将 mySQL 导出到 CSV 不正确显示特殊字符

mysql - 插入 SQL 错误

sql - 通过计算空值获取完成的列的百分比