仅搜索MySQL IN语句中的第一个元素

时间:2013-11-20 18:43:44

标签: mysql sql database

我有这样的问题:

SELECT * FROM `subjects` WHERE `teacher_id` IN ( 7, 11, 32 )

如果teacher_id有这个值:

teacher_id = 7, 5, 9

您将获得该字段的结果,但如果teacher_id具有此值:

teacher_id = 5, 11, 9

它找不到任何结果。

因此,此查询仅适用于第一个元素。

1 个答案:

答案 0 :(得分:2)

所以?这是可以预料的。以下两个陈述在功能上是相同的:

WHERE x IN (1,2,3)
WHERE (x = 1) OR (x = 2) OR (x = 3)

当您的数据库字段包含文字文本1,2时,比较将为:

WHERE x = '1,2'

并被视为字符串比较。由于您正在执行int = string,因此字符串将转换为int,这意味着,2被剥离,您最终会使用

WHERE x = 1

您应该修复表结构并规范化该字段。有很少的使用案例,将多个值放入表中,而您不属于其中一种情况。