Как сделать правильный запрос на обновление? - PullRequest
0 голосов
/ 29 мая 2018

Добрый день, ребята,

Я пытаюсь ОБНОВИТЬ весь столбец в моей таблице с результатом другого запроса SELECT.Запрос, который я пытаюсь выполнить:

UPDATE 
    clients 
SET 
    activity = (
        SELECT 
            IFNULL(
                GROUP_CONCAT(
                    CONCAT(
                        ' ',
                        o.event_abr, 
                        ' ',
                        IFNULL(CONCAT(o.quantity,'x'),''), 
                        IFNULL(o.price,'')
                    )
                )
            ,'') 
        FROM 
            clients c 
        LEFT OUTER JOIN 
            orders o 
        ON 
            (c.id = o.client_id) 
        WHERE 
            c.id = clients.id
    )

Я получаю #1267 - Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) for operation '<>'

Однако, если я запускаю просто SELECT, он отлично работает с единственным изменением clients.id с некоторым целым числом

Пожалуйста, помогите:)

1 Ответ

0 голосов
/ 29 мая 2018

Полагаю, вам нужен только коррелированный подзапрос:

UPDATE clients c
    SET activity = (SELECT COALESCE(GROUP_CONCAT(' ', o.event_abr,  ' ',
                                                 COALESCE(CONCAT(o.quantity, 'x'), ''), 
                                                 COALESCE(o.price, '')
                                                )
                                   ), '') 
                    FROM orders o 
                    WHERE c.id = o.client_id
                   );

Примечания:

  • В MySQL вы не можете ссылаться на обновляемую таблицу вне условия UPDATE.Вы можете выразить это как JOIN, но вы уже пошли по пути подзапроса.
  • CONCAT() не требуется с GROUP_CONCAT().Он принимает произвольное количество аргументов.
  • COALESCE() является стандартом ANSI.Поэтому я предпочитаю это.
  • Ваш GROUP_CONCAT() странный, начинающийся с пробела.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...