Запрос DB2 не возвращает строки со значениями столбцов NULL - PullRequest
0 голосов
/ 20 сентября 2018

Я пишу запрос DB2, в котором я пытаюсь вернуть все строки, включая NULL, за исключением случаев, когда идентификатор не равен 100.

Однако, работая ниже запроса, я получаю все нужные строки, кроме случаев, когда U4156_GRPDC_CLM_FLDR_EXTREFNULL.Здесь я что-то упускаю?Пожалуйста, помогите.

SELECT 
    OBJECT_ID, VERSION_STATUS, OBJECT_CLASS_ID, SECURITY_ID, 
    SECURITY_FOLDER_ID, RECOVERY_ITEM_ID, U4156_GRPDC_CLM_FLDR_EXTREF, 
    U9C48_CMACMCASEIDENTIFIER, U3E88_GRPDC_COMM_STTS
FROM
    OSDBUSR.DOCVERSION T0 
WHERE  
    U4156_GRPDC_CLM_FLDR_EXTREF <> 1000

1 Ответ

0 голосов
/ 20 сентября 2018

Как говорит Мичил, NULL = NULL неверно, а нелогично NULL <> NULL также ложно.Для вашего запроса NULL <> 1000 также имеет значение false, поэтому строки с NULL в столбце U4156_GRPDC_CLM_FLDR_EXTREF не будут соответствовать вашему предикату и будут отфильтрованы.Вы можете обвинить Кодда, если хотите, но это просто способы, с помощью которых NULL работают в SQL.

Таким образом, чтобы получить желаемый результат, вам потребуется следующее

SELECT 
    OBJECT_ID, VERSION_STATUS, OBJECT_CLASS_ID, SECURITY_ID, 
    SECURITY_FOLDER_ID, RECOVERY_ITEM_ID, U4156_GRPDC_CLM_FLDR_EXTREF, 
    U9C48_CMACMCASEIDENTIFIER, U3E88_GRPDC_COMM_STTS
FROM
    OSDBUSR.DOCVERSION T0 
WHERE  
    U4156_GRPDC_CLM_FLDR_EXTREF <> 1000
OR  U4156_GRPDC_CLM_FLDR_EXTREF IS NULL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...