Отображать только те записи, которые не имеют определенного ключевого квалификатора - PullRequest
0 голосов
/ 05 августа 2020

Итак, у меня есть таблица с составным первичным ключом для SHIP # и REF #. Каждый SHIP # имеет несколько кодов для REF #: BM, PO, CS, RT и c. Поле CS является обязательным, но остальные заполняются только тогда, когда пользователь что-то вводит. Итак, выбор basi c будет отображать что-то вроде этого:

SHIP#           REF#    VALUE
000002          CS      20001836                      
000002          PO      020  
000002          BM      MIDLANDAV         
000003          CS      20001834                      
000003          PO      8-694
000004          CS      200POLDQ                         
000004          BM      20001835
000005          CS      SEN6790C

                  

Теперь вы заметите, что отгрузка 000004 имеет только CS и BM и не содержит PO.

Я хочу отобразить все поставки с ценностями CS. Итак, если значение PO пустое или не существует, как в случае «000004» и «000005», должны отображаться только эти записи. Поскольку CS является обязательным, нам нужно будет получить все записи, в которых существует CS, но не должно быть поля PO.

Итак, результат должен быть:

SHIP#           REF#    VALUE                     
000004          CS      200POLDQ                         
000005          CS      SEN6790C

Сообщите мне если вам нужны дополнительные разъяснения. Спасибо.

Ответы [ 2 ]

2 голосов
/ 05 августа 2020

Используйте not exists:

select t.*
from t
where t.ref# = 'CS' and
      not exists (select 1
                  from t t2
                  where t2.ship# = t.ship# and t2.ref# = 'PO'
                 );
0 голосов
/ 05 августа 2020

Спасибо за ответы, но, похоже, это тоже работает.

select a.ship#
from a
left join b on b.ship# = a.ship# and b.ref# = 'PO'
where a.ref# = 'CS' and b.ship# is null;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...