2016-10-31 2 views
2

특정 조합이 존재하지 않는 SQL 테이블에서 모든 행을 찾아야합니다. 예를 들어, 아래 표를 고려하십시오.조합이없는 행을 찾습니다. SQL

ID Column_1 Column_2 
1. ID1  ABC 
2. ID1  XYZ 
3. ID1  QWE 
4. ID2  XYZ 
5. ID2  QWE 
6. ID3  XYZ 
7. ID3  ABC 
8. ID3  QWE 

위 표에서 (ID2, ABC) 조합이 없으므로 ID2를 반환해야합니다. 현재 테이블의 각 ID에 대해 WHILE 및 IF EXISTS를 수행하고 있지만 더 효율적인 방법이 있습니까? 볼륨이 크다.

업데이트 : 아래의 모든 대답은 예상 한 값을 반환하는 것 같습니다. 한 방법이 다른 방법보다 이점이 있습니까? 그냥 ID2 필요한 경우

+0

호환되지 않는 데이터베이스 태그를 제거했습니다. 실제로 사용하고있는 데이터베이스의 태그를 다시 추가하십시오. –

+0

mysql 또는 sql-server .. ??? – scaisEdge

+0

SQL Server 죄송합니다 – Noob

답변

0

당신의 필요가 없습니다하고

select distinct column_1 
from my_table 
where column_1 not in (select column_1 from my_table 
         where column_2 ='ABC'); 
0

, 당신은 group byhaving을 사용할 수 있습니다 : 당신이 실제로 누락 된 값을 원하는 경우

select t2.column_1 
from t 
group by t2.column_1 
having count(*) <> (select count(distinct t2.column_2) from t t2); 

쿼리는 좀 더 복잡하다.

0

당신은이 같은 쿼리를 사용할 수있는 부속 선택 수 : 당신이 목록 중 하나를 가지고 있지 않는 모든 모든 column_1을 원하는 경우에

with ids (v1) as 
(select distinct v1 from Mytable), 
vals (v2) as 
(select distinct v2 from Mytable), 
allCombs as 
(select v1, v2 from ids, vals) 
select * from allCombs c 
where not exists (select * from myTable t where c.v1 = t.v1 and c.v2 = t.v2); 
0

을 당신은 이와 같은 일반적인 경우에 그것을 할 수 있습니다.

-- first make the list 
with items_2_find as 
(
    SELECT 'ABC' as V 
    UNION ALL 
    SELECT 'XYZ' as V 
    UNION ALL 
    SELECT 'QWE' as V 
) 
-- left join and find missing 
SELECT items_2_find.V 
FROM items_2_find 
LEFT JOIN aTable ON items_2_find.V = aTable.Column_2 
WHERE aTable.Column_1 is null 
관련 문제