Допустим, моя схема БД выглядит следующим образом:
T_PRODUCT
id_product (int, primary)
two entries: (id_product =1) , (id_product =2)
T_USER
id_user (int, primary)
id_product (int, foreign key)
name_user (varchar)
two entries: (id_product=1,name_user='John') , (id_product=1,name_user='Mike')
Если я запускаю первый запрос, чтобы получить все продукты со своими пользователями (если они есть), я получаю это:
SELECT T_PRODUCT.id_product, T_USER.name_user
FROM T_PRODUCT
LEFT JOIN T_USER on T_USER.id_product = T_PRODUCT.id_product;
>>
id_product name_user
1 John
1 Mike
2 NULL
Хорошо выглядит для меня.
Теперь, если я хочу того же, за исключением того, что я хотел бы иметь один продукт на строку с объединенными именами пользователей (если есть пользователи, в противном случае NULL):
SELECT T_PRODUCT.id_product, GROUP_CONCAT(T_USER.name_user)
FROM T_PRODUCT
LEFT JOIN T_USER on T_USER.id_product = T_PRODUCT.id_product;
>>
id_product name_user
1 John,Mike
**expected output**:
id_product name_user
1 John,Mike
2 NULL
Если для продукта нет пользователей, GROUP_CONCAT не позволяет mysql создать линию для этого продукта, даже если есть LEFT JOIN .
- Это ожидаемое поведение MySQL?
- Можно ли как-нибудь получить ожидаемый результат, используя GROUP_CONCAT или другую функцию?