首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何进行正确的更新查询?

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

Stack Overflow用户
提问于 2018-05-29 07:55:45
回答 1查看 44关注 0票数 0

大家好,

我正在尝试用另一个SELECT查询的结果更新表中的整个列。我尝试运行的查询是:

代码语言:javascript
复制
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更改为某个整数,它就可以完美地工作

请帮助:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-29 08:40:41

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

代码语言:javascript
复制
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()不需要的subquery.
  • CONCAT()的道路。它需要任意数量的arguments.
  • COALESCE()是ANSI标准。因此我更喜欢它。
  • 你的GROUP_CONCAT()很奇怪,以空格开头。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50574634

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档