如何进行正确的更新查询?

yi0zb3m4  于 2021-06-23  发布在  Mysql
关注(0)|答案(1)|浏览(423)

大家好,
我试图用另一个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 '<>' 但是,如果我运行just select,它只需更改 clients.id 到某个整数
请帮忙:)

sshcrbum

sshcrbum1#

我猜您只需要一个相关的子查询:

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

相关问题