我有一些用户表,其中包含city_id列,在此列中,城市ID以逗号分隔的形式存储,如下所示:
user_id user_name city_id
1 abc1 1,2,3
2 abc2 15,2,9
3 abc5 1,2,13
现在,我要从city_id列中搜索包含城市ID = 1,9,13
的行。
如何做到?
预期的输出量:
abc, abc1, abc3
答案 0 :(得分:2)
您应该避免像目前那样将CSV数据存储在city_id
列中。理想情况下,一条记录应仅包含city_id
的一个数据点。话虽这么说,MySQL提供的功能FIND_IN_SET
至少可以处理CSV数据。尝试以下查询:
SELECT user_name
FROM yourTable
WHERE
FIND_IN_SET('1', city_id) > 0 OR
FIND_IN_SET('9', city_id) > 0 OR
FIND_IN_SET('13', city_id) > 0;
我们可以通过将REGEXP
与正则表达式交替使用\b(1|9|13)\b
来使查询更加紧密:
SELECT user_name
FROM yourTable
WHERE city_id REGEXP '[[:<:]](1|9|13)[[:>:]]';