MySQL инструкция для group_concat в обновлении из двух других таблиц - PullRequest
0 голосов
/ 09 мая 2020

У меня есть 3 таблицы ниже. Я пытаюсь написать оператор group_concat для столбца «item» в таблице cart_session

TABLE products

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

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

TABLE cart_items

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

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

ТАБЛИЦА cart_session

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

1 Ответ

0 голосов
/ 09 мая 2020

Вы можете использовать синтаксис обновления / соединения следующим образом:

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, которые не совпадают в других таблицах, в то время как первый запрос оставляет такие строки нетронутыми.

...