mysql - 使用同一表列行中的值更新表行

标签 mysql mysql-error-1054

我想使用 updated_at 列的值更新 created_at 列的值,其中 created_at 列的值为 0000 -00-00

我尝试了以下查询:

UPDATE tbl_message_types a 
SET a.created_at = (
SELECT
    c.updated_at 
FROM
    ( SELECT b.updated_at 
      FROM tbl_message_types b 
      WHERE b.created_at LIKE '%0000-00-00%' 
        AND a.id = c.id ) AS c 
    ) 
    AND a.created_at LIKE '%0000-00-00%';

但是查询结果如下:

> 1054 - Unknown column 'a.id' in 'where clause'
> Time: 0.008s

如何修改查询?

最佳答案

您的别名不合适,但我会使用连接来表达此更新:

UPDATE tbl_message_types a
INNER JOIN UPDATE tbl_message_types b
    ON a.id = b.id AND
       COALESCE(b.created_at, '0000-00-00') != '0000-00-00'
WHERE COALESCE(a.created_at, '0000-00-00') = '0000-00-00';

请注意,不清楚如何在表中得到 0000-00-00 的日期时间值。我在回答中以同样的方式处理 NULL,不过如果您不同意,您可以删除对 COALESCE 的调用。

关于mysql - 使用同一表列行中的值更新表行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52023324/

相关文章:

javascript - 错误 1054 - 在 WHERE 中用作字段的变量被用作列

mysql - 在动态 View 中使用准备好的语句

mysql - 加入 "AND"条件中的 case 语句

mysql - 数据库连接失败 - 错误

mysql - SQL:如何存储和选择在同一日期范围内有空的人员

mysql - Like 中的子查询字段

php - 如何将 mysql 数据的输入与 php/sql 进行比较?

mysql - NewSQL 与传统优化/分片

mysql - {MySQL} 错误 #1054 SQL 似乎没问题(触发器)

Python:MySQL 错误