如何进行适当的更新查询?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (30)

试图更新我的表中的整个列,与另一个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 '<>'

提问于
用户回答回答于

只是想要一个相关的子查询:

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标准。

扫码关注云+社区

领取腾讯云代金券