2017-01-27 4 views
-1

у меня есть таблица данных, которая выглядит примерно так:запроса для идентификации записей без определенных значений

ID Num | Code 
------------- 
    1 | A 
    1 | B 
    1 | C 
    1 | D 
    2 | A 
    2 | B 
    3 | A 
    3 | B 
    3 | D 
    4 | B 
    5 | A 
    5 | B 
    5 | E 

И мне нужно, чтобы иметь возможность написать запрос SQL, чтобы показать мне все идентификационные номера, которые не имеют Коды C или D, связанные с ними. (Который в этом примере будет Идентификационный номер 2, 4, & 5.)

Заранее благодарим за любую помощь, которую вы можете предоставить!

+0

Извините. Это DB2. –

ответ

1

Я хотел бы использовать NOT IN:

SELECT DISTINCT ID_Num 
FROM t 
WHERE ID_Num NOT IN 
(SELECT ID_Num 
FROM t 
WHERE code = 'C' 
OR code = 'D') 
1

Я хотел бы подойти к этому типу вопроса с использованием group by и having:

select id_num 
from t 
group by id_num 
having sum(case when code in ('C', 'D') then 1 else 0 end) = 0; 
0

вы можете использовать 'не существует' (часто более производительным из не дюйм)

SELECT DISTINCT ID_Num 
FROM yourtable f1 
WHERE not exists 
(
    SELECT * FROM yourtable f2 
    WHERE f2.code in ('C', 'D') and f2.ID_Num=f1.ID_Num 
) 
0

вы можете использовать «левое внешнее соединение сбоку» и не принимать за основу r ow вот так:

SELECT DISTINCT f1.ID_Num 
FROM yourtable f1 
LEFT OUTER JOIN LATERAL 
(
    SELECT f2.ID_Num FROM yourtable f2 
    WHERE f2.code in ('C', 'D') AND f2.ID_Num=f1.ID_Num 
    FETCH FIRST ROWS ONLY 
) f3 on 1=1 
WHERE f3.ID_Num is null 
Смежные вопросы