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

时间:2018-03-07 09:19:33

标签: mysql

有没有办法将group_concat的结果放在SQL查询的IN条件中。

在网络主表中,我在industryId列中有逗号分隔的字段。 像,

userId     industryId
123        3831
123        2832,3832
123        3833

示例:

  

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

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

获得了这种类型的输出
userId      industryId
123         3831,2832,3832,3833

现在我做了这件事,

  

select * from industry_master where industryId in(select   group_concat(cId SEPARATOR','的行业订单)来自   network_master其中userId = 123 group by userId);

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

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

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分: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)); 

答案 1 :(得分: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)   ;