首页 文章

group_concat结果在IN条件下不起作用

提问于
浏览
4

是否有任何可能的方法将group_concat的结果放在SQL查询的IN条件中 .

在网络主表中,我在industryId列中有逗号分隔的字段 . 喜欢,

userId     industryId
123        3831
123        2832,3832
123        3833

例:

从network_master中选择group_concat(cId SEPARATOR','的industryId order),其中userId = 123

它给了我这种类型的输出3831,2832,3832,3833我用上层查询得到了这种类型的输出,

userId      industryId
123         3831,2832,3832,3833

现在我做了这件事,

select * from industry_master where industryId in(select_concat(industryId order by cId SEPARATOR',')from network_master where userId = 123 group by userId);

在这个查询结果中,我只获得了industryId = 3831的详细信息输出 . 我没有得到其他的Ids输出 .

我需要此查询中的所有industryId输出 . 如何在 mysql 中实现这一目标 .

任何帮助,将不胜感激 .

2 回答

  • 3

    我已经尝试了以上情况,但没有在我身边工作 . 我只是编辑了上面的答案并删除了> 0然后我可以看到你的预期输出 .

    你能试试下面的代码吗?

    select * from industry_master where find_in_set(industryId,  (select group_concat(industryId order by cId SEPARATOR ',') 
    from network_master where userId = 123 group by userId));
    
  • 2

    你不需要group_concat和IN子句就可以使用连接

    select i.* 
      from industry_master i
      INNER JOIN network_master  n on  i.industryId = n.industryId 
      AND n.userId =123
    

    group_concat返回一个字符串但是你需要值,所以使用IN子句中的字符串不能正常工作 .

    或者如果只能使用一个字符串,你可以尝试使用field_in_set> 0

    select * from industry_master 
    where find_in_set(industryId,  select group_concat(industryId order by cId SEPARATOR ',') 
          from network_master where userId =123 group by userId)   ;
    

    要么

相关问题