有没有办法将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 中实现这一目标。
任何帮助都将不胜感激。
答案 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) ;
或