У меня есть (и не принадлежит, поэтому я не могу изменить) таблица с макетом, похожим на этот.
ID | CATEGORIES
---------------
1 | c1
2 | c2,c3
3 | c3,c2
4 | c3
5 | c4,c8,c5,c100
Мне нужно вернуть строки, которые содержат определенный идентификатор категории.Я начал с написания запросов с помощью операторов 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
?