Mysql 查找集合中的位置之间的差异(…)>;0,其中查找集合中的集合(…)

Mysql 查找集合中的位置之间的差异(…)>;0,其中查找集合中的集合(…),mysql,Mysql,据 通常,使用FIND_IN_SET()函数或类似运算符搜索集合值: mysql>从tbl\U名称中选择*,其中在\u集合中查找('value',SET\u col)>0 据 在集合中查找集合(str,strlist) 如果字符串str位于由N个子字符串组成的字符串列表strlist中,则返回1到N之间的值。字符串列表是由“,”字符分隔的子字符串组成的字符串。如果第一个参数是常量字符串,第二个参数是SET类型的列,则会优化FIND_IN_SET()函数以使用位算术。如果str不在strlist中

通常,使用FIND_IN_SET()函数或类似运算符搜索集合值:

mysql>从tbl\U名称中选择*,其中在\u集合中查找('value',SET\u col)>0

在集合中查找集合(str,strlist)

如果字符串str位于由N个子字符串组成的字符串列表strlist中,则返回1到N之间的值。字符串列表是由“,”字符分隔的子字符串组成的字符串。如果第一个参数是常量字符串,第二个参数是SET类型的列,则会优化FIND_IN_SET()函数以使用位算术。如果str不在strlist中或strlist为空字符串,则返回0。如果任一参数为NULL,则返回NULL

所以我觉得

SELECT * FROM tbl_name WHERE FIND_IN_SET('value',set_col)
当您要从集合中查找值时,此选项将正常工作

那么,为什么MySQL参考手册中的示例会显式地与
>0
进行比较呢


有什么不同吗?

考虑以下两个
WHERE
条款:

WHERE FIND_IN_SET('value', set_col) > 0
WHERE FIND_IN_SET('value', set_col)
在第一种情况下,如果
sel\u col
中的任何条目包含
value
,则
FIND\u In_SET()
的返回值将大于0,否则将为0。换句话说,如果找到
,它将返回
TRUE
,否则返回
FALSE

第二个
WHERE
子句将计算为
WHERE X
,其中
X
为1或更大,如果
value
未找到,则为0。在MySQL中,值
0
FALSE
同义,大于等于
1的正数与
TRUE
同义(请参阅)


因此,这两个
WHERE
子句的行为相同。

考虑以下两个
WHERE
子句:

WHERE FIND_IN_SET('value', set_col) > 0
WHERE FIND_IN_SET('value', set_col)
在第一种情况下,如果
sel\u col
中的任何条目包含
value
,则
FIND\u In_SET()
的返回值将大于0,否则将为0。换句话说,如果找到
,它将返回
TRUE
,否则返回
FALSE

第二个
WHERE
子句将计算为
WHERE X
,其中
X
为1或更大,如果
value
未找到,则为0。在MySQL中,值
0
FALSE
同义,大于等于
1的正数与
TRUE
同义(请参阅)


所以这两个
,其中
子句的行为是相同的。

事实上两者都是相同的。事实上两者都是相同的。