GROUP_CONCAT和LEFT_JOIN问题-不是所有返回行
-
11-09-2019 - |
题
让我们说我的数据库方案如下:
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从生产线用于这个产品,即使有一个 左边加入.
- 这是一个预期MySQL行为?
- 是否有任何种方式我可以得到预期的产出,使用GROUP_CONCAT或另一种功能?
解决方案
啊,找到我的回答:
你应该永远不会忘记的 小组通过 条款工作时 GROUP_CONCAT.我失踪 GROUP BY T_PRODUCT.id_product
在我的第二个查询。
我会留下的问题的情况下,有人因为心不在焉,因为我。
编辑:
从 这个答案, 我想我还可以激活SQL模式 ONLY_FULL_GROUP_BY
迫MySQL扔一个错误的情况下组由是缺失的或不正确的。
其他提示
或者,也可以使用一个子查询的,只是测试性能
SELECT
T_PRODUCT.id_product,
(SELECT GROUP_CONCAT(T_USER.name_user)
FROM T_USER
WHERE T_USER.id_product = T_PRODUCT.id_product
)
FROM T_PRODUCT
不隶属于 StackOverflow