Обновить строку таблицы значениями из той же строки столбца таблицы - PullRequest
0 голосов
/ 26 августа 2018

Я хочу обновить значения столбца created_at значениями столбца updated_at, где значение в столбце created_at равно 0000-00-00 .

Iпробовал следующий запрос:

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

Как я могу изменить запрос?

Ответы [ 2 ]

0 голосов
/ 26 августа 2018

Я думаю, что вы можете сделать это намного проще ... без каких-либо уловок соединения; Почему вы должны настаивать на одном запросе ..? Выберите «Сначала», а затем обновите. Попробуйте это ..

     select 

        value1 from tableName 

        where columnX like '%someThing%' and columnY = 'SomeValue' as value11;

     update sametableName set someColumn= value11

         where....
0 голосов
/ 26 августа 2018

Ваш псевдоним неуместен, но я бы написал это обновление, используя объединение:

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';

Обратите внимание, что непонятно, как вы получили значения datetime 0000-00-00 в вашей таблице. В моем ответе я трактую NULL таким же образом, хотя вы можете отменить звонок на COALESCE, если не согласны.

...