我正在对LIKE
执行GROUP_CONCAT
查询,这会给出0个错误的结果,因为这些重叠区域存在area_seq
。
以下是我的查询
select ar.area_seq
from area ar
where ar.name LIKE (select GROUP_CONCAT(overlapped_areas)
from overlapping_areas oa, area ar
where oa.area_seq = ar.area_seq)
GROUP_CONCAT query results : adair county, orange county, baldwin county etc....
但是,GROUP_CONCAT(overlapped_areas)
为逗号(,)分隔了重叠区域。但是,同样我传递到区域表然后理想情况下应返回area_seq
,但它只返回没有结果。
答案 0 :(得分:1)
您可以在此处使用FIND_IN_SET
:
SELECT area_seq
FROM area
WHERE FIND_IN_SET(name, (SELECT GROUP_CONCAT(overlapped_areas)
FROM overlapping_areas oa, area ar
WHERE oa.area_seq = ar.area_seq)) > 0;
FIND_IN_SET
在多个字词的CSV字符串中搜索字符串。例如:
FIND_IN_SET('Orange County', 'adair county,orange county,baldwin county')
将返回2
,因为orange county
出现在CSV地点列表的第二个位置。当没有匹配时,FIND_IN_SET
返回0。
我觉得以下查询应该给出相同的结果,减去不必要的GROUP_CONCAT
后跟FIND_IN_SET
调用的性能损失:
SELECT area_seq
FROM area
WHERE name IN
(
SELECT overlapped_areas
FROM overlapping_areas oa
INNER JOIN area ar
ON oa.area_seq = ar.area_seq
);