繁体   English   中英

如何进行适当的UPDATE查询?

[英]How to make proper UPDATE query?

大家好

我试图用另一个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更改为某个整数即可完美运行

请帮忙 :)

我猜你只想要一个相关的子查询:

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 ,但是您已经走过了子查询的道路。
  • GROUP_CONCAT()不需要CONCAT() GROUP_CONCAT() 它需要任意数量的参数。
  • COALESCE()是ANSI标准。 因此,我更喜欢它。
  • 您的GROUP_CONCAT()很奇怪,以空格开头。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM