MySQL IN子句没有引号

时间:2016-03-23 09:08:04

标签: mysql

我有以下简单的MySQL查询返回0结果:

SELECT d.name FROM document d WHERE 10 IN (d.categories)

“categories”的类型为varchar,包含例如“10,20,30”。

当我直接输入IN值时,它会起作用并返回结果:

SELECT d.name FROM document d WHERE 10 IN (10,20,30)

我怀疑MySQL用这样的东西代替d.documents当然不是我想要的东西:

SELECT d.name FROM document d WHERE 10 IN ("10,20,30")

对此有什么正确的解决方法?

2 个答案:

答案 0 :(得分:6)

当您提供的价值为" 10,20,30"然后将其视为单个值,而不是预期的三个不同值。要将值设为三个不同的值,您需要在MySQL中使用find_in_set函数。

我还建议你仔细阅读这个主题:Is storing a delimited list in a database column really that bad?

答案 1 :(得分:2)

是的,使用find_in_set:

SELECT d.name FROM document d WHERE find_in_set(10, d.categories) > 0