首页 > 解决方案 > 来自其他两个表的更新中 group_concat 的 MySQL 语句

问题描述

我在下面有 3 个表我正在尝试为group_concat表 cart_session 中的“item”列编写一个语句

桌子products

id      name
------------------------
123  |  car
456  |  boat
789  |  house

--------------------------------

桌子cart_items

pid session
----------------------
123  |  ABCD    
456  |  ABCD
789  |  EFGH

----------------------------------

桌子cart_session

id   item
----------------------------
ABCD  |  car,boat
EFGH  |  house

标签: mysqlsqljoingroup-bysql-update

解决方案


您可以按如下方式使用更新/加入语法:

update cart_session cs
inner join (
    select ci.session, group_concat(p.name) item
    from products p
    inner join cart_items ci on ci.pid = p.pid
    group by ci.session
) x on x.session = cs.session
set cs.item = x.item

另一个选项使用相关子查询:

update cart_session cs
set cs.item = (
    select group_concat(p.name)
    from products p
    inner join cart_items ci on ci.pid = p.pid
    where ci.session = cs.session
)

这略有不同:此查询将为在其他表中不匹配的null行分配一个值cart_session,而第一个查询将这些行保持不变。


推荐阅读