我有一个MySQL表格列rubrics,其中包含字符串值'61,80,112,256'。所以我尝试执行该查询:
select * from table where 256 in (rubrics) and 61 in (rubrics)
没有结果返回。有什么建议吗?
答案 0 :(得分:4)
由于您的rubrics
列是以逗号分隔的列表,因此IN
运算符不起作用。
MySQL确实有一个可以在字符串列表中找到值的函数,因此您应该可以使用FIND_IN_SET()
:
select *
from yourtable
where find_in_set(61, rubrics)
or find_in_set(256, rubrics)
答案 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
运算符无法使用字符串
使用正确的子字符串匹配运算符,例如LIKE
或LOCATE
一条建议 - 更新您的rubics列以开始和结束,
字符,这将使您的LOCATE(",62,", rubics)
操作明确,而LOCATE("62", rubics)
也将与622和262以及其他匹配组合。如果您的评论标准值为,62,
,因为它不以62,blah,foo,bar
,
会失败