Допустим, у меня есть простая таблица, такая как эта:
id_ | tags
---------------
0 | foo1, baz
1 | bar1, qux
Столбец id_
имеет тип SERIAL
, а столбец tags
имеет тип TEXT[]
(текстовый массив).
Для поиска в столбце tags
с оператором LIKE
я использую комбинацию unnest
и DISTINCT ON
, например:
SELECT DISTINCT ON (id_) *
FROM (
SELECT unnest(tags) tag, *
FROM Records
) x
WHERE
(tag LIKE '%o%');
Это прекрасно работает,Запрос возвращает строку 0
, как и должно быть.
Теперь я пытаюсь найти способ инвертировать запрос, чтобы он возвращал только строки, которые не соответствуютLIKE
выражение.Я пытался с этим:
WHERE
(tag NOT LIKE '%o%');
, но, похоже, он не работает ... Моя идея состояла в том, что этот запрос должен возвращать только строку 1
, но он возвращает обе строки.
Я также пробовал с подзапросами, например, такими:
WHERE
(x.id_ NOT IN (SELECT id_ FROM Records WHERE tag like '%o%'));
Но он по-прежнему возвращает обе строки.
Кто-нибудь знает, как это можно исправить?