回答

收藏

GROUP_CONCAT和LEFT_JOIN问题-并非所有的行都回来了

技术问答 技术问答 95 人阅读 | 0 人回复 | 2023-09-13

假设我的数据库方案如下:
. A0 u3 ~. w+ {$ n) Z+ gT_PRODUCTid_product (int,primary)two entries: (id_product =1) ,(id_product =2)T_USERid_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')如果我运行第一个查询获取所有产品及其用户(如有),我将获得以下信息:+ j" q. D! E8 }; A( O9 \
SELECT T_PRODUCT.id_product,T_USER.name_user FROM T_PRODUCTLEFT JOIN T_USER on T_USER.id_product = T_PRODUCT.id_product;>>id_product name_user1                                                                                                                                                                                                                                                                                                                                                                              John1                                                                                                                                                                                                                                                                                                                                                                              Mike2                       NULL看起来对我很好。现在,如果我想做同样的事情,除了我希望每行都有一个产品,并使用级联用户名(如果有任何用户,否则是NULL):
3 o6 G# @$ d: e1 G3 ?; QSELECT T_PRODUCT.id_product,GROUP_CONCAT(T_USER.name_user) FROM T_PRODUCTLEFT JOIN T_USER on T_USER.id_product = T_PRODUCT.id_product;>>id_product name_user1                                                                                                                                                                                                                                                                                                                                                                              John,Mike**expected output**:id_product name_user1                                                                                                                                                                                                                                                                                                                                                                              John,Mike2                       NULL如果用户没有产品,即使有 LEFT JOIN    ,GROUP_CONCAT也会阻止mysql产品生产线。+ S+ E6 |4 [4 g" q  k# L- B
[ol]这是预期的MySQL行为吗?( B& h" R. A$ o/ ?' B8 d
用什么方法?GROUP_CONCAT还是其他函数获得预期输出?[/ol]                                                               
# e5 Z+ l6 D/ r+ c$ ]! B" d, X3 ^# y    解决方案:                                                                " U) F  {9 V/ R. s  l3 k- P
                                                                啊,找到我的答案:( d9 \& o- L5 B2 o
使用 GROUP_CONCAT*    你永远不会忘记  GROUP BY    子句。我在第二次查询中失踪了。*GROUP BYT_PRODUCT.id_product. a7 e8 E5 f' S8 ?
如果有人像我一样心不在焉a,我不会提问题。
. _/ t6 H  K2 p0 F/ e& a- R# y编辑    :( z  X1 s. s" a3 P$ X+ O, `3 O: K- t
从这个答案中,我想我可以激活它SQL模式ONLY_FULL_GROUP_BY,丢失或不正确GROUPBY强制MySQL引发错误。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则