Как проверить несколько столбцов для значения, но если столбец имеет значение NULL, то не заботиться о нем - PullRequest
0 голосов
/ 15 января 2020

person1, person2, person3, status1, status2, status3, где status может быть либо «Not done», либо «Done», либо null, если значение отсутствует, поскольку с ним не связано ни одно лицо. Я пытаюсь запросить в таблице строку, если какое-либо состояние имеет значение «Не выполнено», однако, если столбец состояния имеет значение «ноль», я не хочу, чтобы это влияло на мой запрос, и строка не будет отображаться, если все другие статусы уже выполнены.

                                         EXAMPLE DATA
                  PK| person1 | person2 | person3 | status1 | status2 | status3
                  1      A         B         C       Done       Done    Not Done
                  2      A         B        NULL     Done       Done      NULL

       select * from table where not (status1 = 'Done' and status2 = 'Done' and status3 = 'Done')

Я пробовал вышеупомянутый запрос, чтобы получить строки, если есть статусы, которые не выполнены, но так как в строке 2 нет никакого person3, что означает, что status3 будет null, тогда строка все равно будет отображаться, даже если статус1 и статус2 уже выполнены, но мне нужно, чтобы он не отображался в моем наборе результатов, и только строка1 должна отображать

1 Ответ

0 голосов
/ 15 января 2020

Если вы ищете строки с 'Not Done' в одном из столбцов состояния ... проверьте это значение, а не что-то другое.

SELECT * FROM TEST WHERE status1 = 'Not Done'
                      OR status2 = 'Not Done'
                      OR status3 = 'Not Done';
PK          person1     person2     person3     status1     status2     status3   
----------  ----------  ----------  ----------  ----------  ----------  ----------
1           A           B           C           Done        Done        Not Done  

(хотя ваш запрос будет также возвращает только этот первый ряд, а не второй, из-за того, как NULL работает ...)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...