如何在mysql中对GROUP_CONCAT应用LIKE查询?

时间:2018-01-19 05:43:04

标签: mysql

我正在对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,但它只返回没有结果。

1 个答案:

答案 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
);