Нулевые значения в ненулевом выражении

#postgresql #sql-null

#postgresql #sql-null

Вопрос:

У меня этот ID столбец отображается как NULL , хотя я ввел NOT NULL выражение. Это не проблема с пустой строкой или каким-либо специальным символом, потому что я пытался использовать это выражение:

 AND  COALESCE(SYSTEM_ID,ASSET_NUMBER,SERIAL_NUMBER,'X')  <>'X'
  

В моем предложении where (то же самое в select) и X выводится вывод о том, почему это происходит — я предоставил пример кода select. Я могу решить эту проблему, поместив фильтр в предложение Having или используя внешний запрос

 SELECT COALESCE(COL1,COL2,COL3) AS ID,
       COL4,
       ...
       COL16
FROM TABLE
WHERE COALESCE(COL1,COL2,COL3) IS NOT NULL
GROUP BY 
      COL4,
      ...
      COL16
  

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

1. Ну, учитывая пример запроса, для ID невозможно иметь значение NULL. Однако то, что может привести к тому, что оно будет равно NULL, зависит от вашего фактического запроса. Например, если ваш фактический запрос WHERE COALESCE(...) IS NOT NULL OR 1 = 1 ; очевидно, что это глупый пример, но вы поняли мою точку зрения… если это действительно значение NULL, то какое-то другое условие в запросе вызывает возврат этой строки.

2. Да, вы должны опубликовать полный запрос, показывающий проблему, в идеале с образцами данных для ее запуска.