2
У меня есть список слов a
b
и c
.
В моей базе данных содержится текстовый столбец содержит много слов, разделенных пробелом.SQL: найти строки, содержащие неожиданные слова
Я хотел бы перечислить все записи, содержащие другие слова, которые я ожидаю.
create table a (id int, memo text);
insert into a values
(1, 'a aa b'),
(2, 'b a'),
(3, 'c a d'),
(4, 'b cc a');
select * from a where memo /*matches something else than 'a', 'b', 'c'*/ ~ '[^abc ]';
/* should return 1 because of aa */
/* 3 because of d */
/* 4 because of cc */
См. SQLFiddle.
Мой текущий запрос возвращает только 3, что не то, что я ищу. Есть ли все-таки сделать это в postgresql?
EDIT
Благодаря Дуэйн Тоуэлл, я пришел с этим запросом.
SELECT * FROM a
WHERE NOt(ARRAY['a','b','c'] @> regexp_split_to_array(memo, E'\\s+')::text[]);
спасибо! Я обнаружил, что быстрее использовать regexp_split_to_array без подзапросов. – oldergod