Result1 Result2
a a
b b
a
두 결과 집합을 뺄셈을 통해 a
을 얻는 방법. NOT EXISTS
및 NOT IN
은이 두 결과 집합에 대해 아무 것도 반환하지 않습니다. 하지만 a
이 반환되기를 바랍니다. 도움이됩니다!두 결과 집합을 빼기 SQL
Result1 Result2
a a
b b
a
두 결과 집합을 뺄셈을 통해 a
을 얻는 방법. NOT EXISTS
및 NOT IN
은이 두 결과 집합에 대해 아무 것도 반환하지 않습니다. 하지만 a
이 반환되기를 바랍니다. 도움이됩니다!두 결과 집합을 빼기 SQL
흠. . . 카운트를 고려하기 때문에 까다 롭습니다. 한 가지 방법은 다음과 같습니다.
select r1.col, r1.cnt - coalesce(r2.cnt, 0)
from (select col, count(*) as cnt
from result1
group by col
) r1 left join
(select col, count(*) as cnt
from resuult2
group by col
) r2
on r1.col = r2.col
where r1.cnt > coalesce(r2.cnt, 0);
이것은 정확히 원하는 것을 반환하지는 않지만 충분할 수도 있습니다.
표준 SQL로select r1.col
from (select col, row_number() over (partition by col order by col) as seqnum
from result1
group by col
) r1 left join
(select col, row_number() over (partition by col order by col) as seqnum
from resuult2
group by col
) r2
on r1.col = r2.col and r1.seqnum = r2.seqnum
where r2.col is null;
고마워요!. 첫 번째 방법을 시도하고 예상 결과를 주었다. 방법 2, 아직 시도. – Isuru
, 당신이에 대한 except all
연산자를 사용할 수 있습니다 : : 또 다른 방법은 row_number()
사용하는 것
select *
from table_one
except all
select *
from table_two
SQLFiddle : http://sqlfiddle.com/#!15/d998c/1
주 당신은 table_one
에 a
두 번이 있다면 위 쿼리는 두 번 반환합니다.
사용중인 SQL 버전은 무엇입니까? –
첫 번째 결과 집합에 세 개의 'a'레코드가 있다고 가정합니다. 그러면 어떤 출력을 원할 것입니까? –
@Tim Biegeleisen, SQL 2012. 'Result1'에 3'a''가 있으면 2'a's가 반환됩니다. – Isuru