Как проверить наличие нулевых значений в строке?

#postgresql

Вопрос:

Мне нужны строки, в которых есть хотя бы один столбец с нулевым значением. Я пытался использовать выражение строки, например:

 SELECT *
FROM <table>
WHERE <table> IS NULL
 

Но это не работает. Мой запрос неверен или?

PS Я использую версию 13.4

Комментарии:

1. FROM <table> Что такое » <таблица>»? пожалуйста, не изобретайте мета-синтаксис. Опубликуйте реальный код.

2. @wildplasser, потому что мне нужно, чтобы выражение работало для любой таблицы. Я создаю API для приема подключений к базе данных и выполнения базового автоматизированного анализа на них. Одним из которых является тестирование на наличие неполных строк. В этом случае неполной строкой будет строка, содержащая нулевые значения.

Ответ №1:

Вы можете ссылаться на псевдоним таблицы в предложении WHERE. Условие where the_table is not null вернет строки, в которых все столбцы не являются нулевыми.

Противоположное этому (где по крайней мере один столбец равен нулю) может быть достигнуто путем отрицания выражения:

 select *
from the_table
where not (the_table is not null);
 

Выглядит немного странно, но это не то же самое, что the_table is null — что никогда не бывает правдой, так как ссылка на таблицу (псевдоним) ссылается на существующую строку. И если строка существует, то «вся строка» не может быть нулевой.

Этот:

 with the_table (col1, col2, col3) as (
values 
  (1,null,null),
  (null,2,null), 
  (null,3,4),
  (5,6,7)
  
) 
select *
from the_table 
where not (the_table is not null);
 

ВОЗВРАТ:

 col1 | col2 | col3
----- ------ -----
   1 |      |     
     |    2 |     
     |    3 |    4
 

Ответ №2:

чтобы проверить, не равно ли значение null, вы используете IS NOT NULL оператор

value IS NOT NULL

Выражение возвращает true, если значение равно NULL, или false, если это не так.

Ответ №3:

Вам нужно указать название своей колонки в поиске.

ВЫБЕРИТЕ * ИЗ <имя_таблицы>, ГДЕ <имя_таблицы><имя_колонны> РАВНО НУЛЮ;

Для более чем одной колонки:

ВЫБЕРИТЕ * ИЗ <имя_таблицы>, ГДЕ <имя_таблицы><имя_колонок 1> РАВНО НУЛЮ ИЛИ <имя_колонок 1><имя_колонок 2> РАВНО НУЛЮ;