MySQL多个IN子句不起作用

时间:2013-02-11 11:00:36

标签: mysql where-in

我有一个MySQL表格列rubrics,其中包含字符串值'61,80,112,256'。所以我尝试执行该查询:

select * from table where 256 in (rubrics) and 61 in (rubrics)

没有结果返回。有什么建议吗?

4 个答案:

答案 0 :(得分:4)

由于您的rubrics列是以逗号分隔的列表,因此IN运算符不起作用。

MySQL确实有一个可以在字符串列表中找到值的函数,因此您应该可以使用FIND_IN_SET()

select *
from yourtable
where find_in_set(61, rubrics)
  or find_in_set(256, rubrics)

请参阅SQL Fiddle with Demo

答案 1 :(得分:1)

WHERE rubrics LIKE '%,256,%' OR rubrics LIKE '256,%' OR rubrics LIKE '%,256'这样的东西。使用括号,您还可以对61进行过滤,但生成的查询将会变得混乱。您最好将数据规范化,这样就可以使用子键查询和连接(实际交易)。

(另见bluefeet的回答为FIND_IN_SET是一种更好的方法)

答案 2 :(得分:0)

试试这个

select * from table where rubrics like '%'+'256,'+'%' and rubrics like '%'+'61,'+'%'

答案 3 :(得分:0)

IN运算符无法使用字符串

使用正确的子字符串匹配运算符,例如LIKELOCATE

一条建议 - 更新您的rubics列以开始和结束,字符,这将使您的LOCATE(",62,", rubics)操作明确,而LOCATE("62", rubics)也将与622和262以及其他匹配组合。如果您的评论标准值为,62,,因为它不以62,blah,foo,bar

开头,找不到,会失败