我试图使用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位于逗号分隔列表中,但未显示在结果中。请你告诉我我做错了什么?
干杯。
答案 0 :(得分:4)
尝试此查询 -
SELECT * FROM inet_staff_details WHERE FIND_IN_SET(10, detail_sections);
答案 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