我有(并且不拥有,所以我不能更改)一个布局与此类似的表格。
ID | CATEGORIES
---------------
1 | c1
2 | c2,c3
3 | c3,c2
4 | c3
5 | c4,c8,c5,c100
我需要返回包含特定类别 ID 的行。我首先使用 LIKE 语句编写查询,因为值可以在字符串中的任何位置
SELECT id FROM table WHERE categories LIKE '%c2%';
将返回第 2 行和第 3 行
SELECT id FROM table WHERE categories LIKE '%c3%' and categories LIKE '%c2%';
会再次让我第 2 行和第 3 行,但不是第 4 行
SELECT id FROM table WHERE categories LIKE '%c3%' or categories LIKE '%c2%';
将再次让我获得第 2、3 和 4 行
我不喜欢所有的LIKE
陈述。我FIND_IN_SET()
在 Oracle 文档中找到了,但它似乎不适用于 10g。我收到以下错误:
ORA-00904: "FIND_IN_SET": invalid identifier
00904. 00000 - "%s: invalid identifier"
运行此查询时:(SELECT id FROM table WHERE FIND_IN_SET('c2', categories);
来自文档的示例)或此查询:(SELECT id FROM table WHERE FIND_IN_SET('c2', categories) <> 0;
来自 Google 的示例)
我希望它返回第 2 行和第 3 行。
有没有更好的方法来编写这些查询而不是使用大量LIKE
语句?