我有这样的问题:
SELECT * FROM `subjects` WHERE `teacher_id` IN ( 7, 11, 32 )
如果teacher_id有这个值:
teacher_id = 7, 5, 9
您将获得该字段的结果,但如果teacher_id具有此值:
teacher_id = 5, 11, 9
它找不到任何结果。
因此,此查询仅适用于第一个元素。
答案 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
您应该修复表结构并规范化该字段。有很少的使用案例,将多个值放入表中,而您不属于其中一种情况。