【问题标题】:Update table row with values from same table column row使用来自同一表列行的值更新表行
【发布时间】:2018-08-26 05:00:44
【问题描述】:

我想用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

如何修改查询?

【问题讨论】:

    标签: mysql mysql-error-1054


    【解决方案1】:

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

    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 的调用。

    【讨论】:

      【解决方案2】:

      我认为你可以用非常简单的方式来做这件事.. 没有任何加入噱头;为什么要坚持一个查询..?选择首先,然后更新。试试这个..

           select 
      
              value1 from tableName 
      
              where columnX like '%someThing%' and columnY = 'SomeValue' as value11;
      
           update sametableName set someColumn= value11
      
               where....
      

      【讨论】:

        猜你喜欢
        • 2012-11-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-11
        • 2020-09-27
        • 1970-01-01
        • 2021-02-11
        相关资源
        最近更新 更多