1

我正在运行一个查询,您可以在其中搜索数组值。我找到了如何在 Stackoverflow 上执行此操作的解决方案,但是,它似乎没有给出我期望的输出。以下是示例,请您告诉我哪里出错了:

我有一个表,其中有一列称为部门,并且一些示例行包含以下值:

1: 2,4
2: 1,7,2,8,9,4
3: 4, 2

我对此进行了查询:

SELECT * FROM udf_multi_value WHERE udfdefid =  '1' AND department IN ( 1, 7, 2, 8, 9, 4 );

这将返回结果中的所有行,这是我所期望的。但是,当我运行时:

 SELECT * FROM udf_multi_value WHERE udfdefid =  '1' AND department IN ( 2, 4 ) 

它只返回第 1 行和第 3 行。由于第 2 行和第 4 行在所有行中,我认为它也应该返回第 2 行。

非常感谢任何帮助。

4

1 回答 1

5

那些具有逗号分隔值的单个字段?如果是这样,那么您将获得预期的行为。您传入整数2and 4,并将它们与 char/varchar 字段进行比较,例如

if (2 == '2,4')
and
if (4 == '2,4')

MySQL 会将 varchar 字段转换为 int,含义2,4变为 int24,2变为 int 4,因此匹配成功。

但是1,7,2,...将被强制转换为 just 1,所以没有匹配项。

您需要规范化您的表,以便这些数字中的每一个都在子表中自己的记录中,或者使用 MySQL 非标准 SQL 函数find_in_set()

... AND (FIND_IN_SET('2', department) OR FIND_IN_SET('4', department))
于 2013-06-04T16:18:00.583 回答