如何进行正确的UPDATE查询?

时间:2018-05-28 23:55:45

标签: mysql sql database

美好的一天,

我正在尝试使用另一个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 :(得分:1)

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

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()很奇怪,从空格开始。