无法使用in子句获取逗号分隔值

时间:2014-08-04 06:04:46

标签: mysql

我有一个表格,其中的数字值由逗号分隔,架构/字段如下所示

preferred_location - 0,161,186,263

preferred_location数据类型是长文本

我试图通过使用下面的查询获取具有preferred_location 161的行

 select * from tablename where preferred_location in(161)

但没有得到任何结果

3 个答案:

答案 0 :(得分:0)

尝试:

select * from tablename where  find_in_set(preferred_location, '0,161,186,263') <> 0

答案 1 :(得分:0)

您需要使用find_in_set()来查找集合中的值,如果您可以更改架构然后对其进行规范化,方法是使用另一个包含此表与preferred_location表关系的联结表

select * from 
tablename 
where 
find_in_set('161',preferred_location ) > 0

根据评论进行修改 对于像find_in_set('161,168,234,678',preferred_location ) > 0这样的多个值,不能这样做,你必须为每个位置ID执行

select * from 
tablename 
where 
find_in_set('161',preferred_location ) > 0
and find_in_set('168',preferred_location ) > 0
and find_in_set('234',preferred_location ) > 0
and find_in_set('678',preferred_location ) > 0 ... for more

Database normalization

find_in_set

答案 2 :(得分:0)

这将用于在列中搜索逗号分隔值:

select * from tablename where preferred_location LIKE %161,% OR LIKE %,161,% OR LIKE %161,% OR LIKE %,161%