Проблема с массивом Postgres

Я пытаюсь написать простой запрос с функцией массива в PostgreSQL, но, похоже, он не работает должным образом.

WITH vars AS (
  SELECT array['1114156957', '1234'] as npi
)
SELECT CASE 
         when '1114156957' <> ANY(npi) then 'Not Found'
         ELSE 'found'
       End as test
FROM vars;

Я новичок в Postgres и никогда раньше не использовал функцию массива. Но разве в приведенном выше запросе результат не должен быть «Найден», поскольку в массиве существует одно из значений?

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
1 511
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

'1114156957' <> ANY(..) означает: «'1114156957' не равно любой значений в массиве. Или, наоборот:« не равно хотя бы одному элементу в массиве ».

Поскольку есть одно значение, которое действительно не равно, условие '1114156957' <> ANY(npi) выполняется.

Если вы хотите проверить, не содержится ли элемент в массиве вообще, вам нужно использовать <> ALL().

WITH vars(npi) AS (
   values (array['1114156957', '1234'])
)
SELECT CASE 
         when '1114156957' = ALL(npi) then 'Not Found'
         ELSE 'found'
       End as test
FROM vars;

возвращает 'Found'

Онлайн-пример: http://rextester.com/UDBNH6876

Другие вопросы по теме