'IN'的使用不正确?

时间:2011-10-28 09:47:39

标签: mysql

我试图使用IN命令在字段中查找所有出现的字符串,但是当我知道应该存在某些字符串时,不会返回任何结果。 我认为向您展示的最佳方式是:

mysql> SELECT detail_sections FROM inet_staff_details WHERE detail_sections !='';
+-----------------+
| detail_sections |
+-----------------+
| 10,11           |
| 10,11           |
| 10,11           |
| 10,11           |
+-----------------+
4 rows in set (0.00 sec)

mysql> SELECT * FROM inet_staff_details WHERE 11 IN (detail_sections);
Empty set, 4 warnings (0.00 sec)

mysql> SELECT * FROM inet_staff_details WHERE '11' IN (detail_sections);
Empty set (0.00 sec)

如您所见,数字11位于逗号分隔列表中,但未显示在结果中。请你告诉我我做错了什么?

干杯。

5 个答案:

答案 0 :(得分:4)

尝试此查询 -

SELECT * FROM inet_staff_details WHERE FIND_IN_SET(10, detail_sections);

FIND_IN_SET function.

答案 1 :(得分:2)

IN的作用是查看列中是否有任何值(在本例中为detail_sections)等于指定值(在本例中为11)。

您应该使用LIKE来获取所需的值。
即。

SELECT * FROM inet_staff_details 
WHERE detail_sections LIKE '11,%'
   OR detail_sections LIKE '%,11' 
   OR detail_sections LIKE '%,11,%' 
   OR detail_sections = '11';

答案 2 :(得分:1)

是的IN在这里不适合你。 IN旨在挑选完整的值,而不是基本上你在这里得到的子串。你的问题是,这是一个基本上有缺陷的数据库设计,它使搜索11等特定值非常困难。

您的选择

(a)重新设计一下(阅读规范化数据库,加入表格)或

(b)搜索:detail_sections = '11' or detail_sectoins LIKE '11,%' or detail_sections LIKE '%,11,%' or detail_sections LIKE '%,11'

答案 3 :(得分:0)

试试这个:

SELECT * FROM inet_staff_details 
WHERE detail_sections LIKE '%,11,%'
OR detail_sections LIKE '%,11'
OR detail_sections LIKE '11,%'
OR detail_sections = '11'

答案 4 :(得分:0)

这样的事情:

   select * from inet_staff_details 
   where instr(concat(',', detail_sections, ','), ',11,') > 0