mysql - ERROR 1241 (21000) 和 ERROR 1093 (HY000) 阻止执行 MYSQL 子查询

标签 mysql sql database subquery

我在这里提供mysql查询:-

mysql> UPDATE tbl_driver SET active_flag=NULL WHERE Pk_driver_id = (SELECT Pk_driver_id FROM tbl_driver JOIN tbl_location ON tbl_driver.pk_driver_id = tbl_location.fk_driver_id WHERE updated_at <= NOW() - INTERVAL 3 MINUTE AND active_flag=1);



ERROR 1093 (HY000): You can't specify target table 'tbl_driver' for update in FROM clause

所以我将子查询更改为选择*:

mysql> UPDATE tbl_driver SET active_flag=NULL WHERE Pk_driver_id = (SELECT * FROM tbl_driver JOIN tbl_location ON tbl_driver.pk_driver_id = tbl_location.fk_driver_id WHERE updated_at <= NOW() - INTERVAL 3 MINUTE AND active_flag=1);



ERROR 1241 (21000): Operand should contain 1 column(s).

请帮我解决这个问题,提前致谢。

最佳答案

使用 INNER JOIN 而不是子选择应该可以使您的更新工作:

UPDATE 
    tbl_driver 
INNER JOIN 
    tbl_location 
ON 
    tbl_driver.pk_driver_id = tbl_location.fk_driver_id
SET tbl_driver.active_flag = NULL
WHERE
    updated_at <= NOW() - INTERVAL 3 MINUTE 
AND 
    tbl_driver.active_flag = 1;

MySQL 当前(版本 5.6)对 use of subqueries in UPDATE statements 有限制:

Currently, you cannot update a table and select from the same table in a subquery.

关于mysql - ERROR 1241 (21000) 和 ERROR 1093 (HY000) 阻止执行 MYSQL 子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24573672/

相关文章:

mysql - 用一个元组引用多行

MySQL 允许 INSERT 无效

mysql - 数据库设计 : members table separate or all in one table?

sql - 使用 SQL 中的前一行进行数学运算,避免嵌套查询?

mysql - 使用 Workbench 生成 SQL

sql - 数组sql中最近的一天

MySQL Workbench 编辑数据

mysql - 创建新实例后 Openstack trove 数据库实例状态=错误

database - 关于使用 mod_rewrite 获得干净 URL 的问题

java - 如何避免在代码中硬编码数据库凭据