我有一个 MySQL 表列量规,其中包含字符串值 '61,80,112,256'。所以我尝试执行该查询:
select * from table where 256 in (rubrics) and 61 in (rubrics)
并且没有结果返回。有什么建议么?
由于您的rubrics
列是逗号分隔的列表,因此IN
运算符将不起作用。
MySQL 确实有一个可以在字符串列表中查找值的函数,因此您应该能够使用FIND_IN_SET()
:
select *
from yourtable
where find_in_set(61, rubrics)
or find_in_set(256, rubrics)
类似的东西WHERE rubrics LIKE '%,256,%' OR rubrics LIKE '256,%' OR rubrics LIKE '%,256'
。使用括号您也可以过滤61
,但结果查询会变得混乱。你最好规范化你的数据,这样你就可以使用子查询和使用键的连接(真正的交易)。
(另请参阅bluefeet的答案,这FIND_IN_SET
是一种更好的方法)
试试这个
select * from table where rubrics like '%'+'256,'+'%' and rubrics like '%'+'61,'+'%'
IN
运算符不适用于字符串
使用正确的子字符串匹配运算符,例如LIKE
或LOCATE
一个建议 - 更新您的 rubics 列以,
字符开头和结尾,这将使您的LOCATE(",62,", rubics)
操作明确,而不是LOCATE("62", rubics)
匹配 622 和 262 以及其他组合。,62,
如果您的 rubics 具有价值,则定位将失败,因为62,blah,foo,bar
它不是以,