Стандартный PostgreSQL не поддерживает оператор пересечения ARRAY.Вы должны установить дополнительный модуль intarray .
Ваш вопрос сводится к следующему:
Пересечение двух пустых целочисленных массивов приводит к пустому целочисленному массиву.Почему этот запрос дает false
?
SELECT ('{}'::int[] & '{}'::int[]) = '{}'::int[]
Или в другом синтаксисе, означающем то же самое:
SELECT (ARRAY[]::int[] & ARRAY[]::int[]) = ARRAY[]::int[]
В то время как это приводит к true
:
SELECT '{}'::int[] = '{}'::int[]
И да, это очень хороший вопрос. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *} * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *'Х, были были были '10 ч *' '.
Другими словами, первый представляет собой пустой массив, а второй - одномерный массив с пустым элементом.
Это может быть очень запутанным.Например, посмотрите эту ветку о , как обрабатывать string_to_array () с пустым выводом .
Я не уверен, что оператор &
здесь делает правильные вещи.