2016-10-06 1 views
1

SQL Developer에서 SET 연산자를 사용하여 카운트 결과를 얻으려고합니다.SQL : SET 연산자를 사용하여 카운트 결과를 얻습니다.

나는 "table_name1"에 있지만 "table_name2"

는 기본적으로 나는 다음과 같은 쿼리에서 얻을 것입니다 결과를 원하는에없는, 그러나 SET 연산자를 사용하는 방법 "속성 1"의 많은 찾아야한다.

SELECT count(distinct <attribute1>) 
FROM <table_name1> 
WHERE <attribute1> IS NOT (SELECT <attribute1> 
          FROM <table_name2>); 

아무도 도와 줄 수 있습니까?

답변

0

, 당신은 MINUS를 사용하여이 문제를 해결 할 수 있습니다

SELECT COUNT(*)      -- use COUNT(DISTINCT attribute1) to avoid 
FROM         -- duplicates 
(
    SELECT attribute1 
    FROM table_name1 
    MINUS 
    SELECT attribute1 
    FROM table_name2 
) t 

을 그러나, 나는 아마 여기에 LEFT JOIN을 사용은 개념적으로 간단하기 때문에 :

SELECT COUNT(DISTINCT t1.attribute1) -- replace with COUNT(*) to count duplicates 
FROM table_name1 t1 
LEFT JOIN table_name2 t2 
    ON t1.attribute1 = t2.attribute1 
WHERE t2.attribute1 IS NULL   -- indicates that attribute does NOT appear in 
            -- the second table 
+0

SET 연산자를 사용해야합니다. LEFT JOIN은 SET 연산자가 아닙니다. – user4824195

+0

@ user4824195 내 답변이 업데이트되었습니다. 'MINUS'도 사용할 수 있습니다. –

+0

당신은 내 목숨을 구했습니다. 정말 고맙습니다!!! – user4824195

0

솔루션 아래에 시도하십시오 :

SELECT count(distinct <attribute1>) 
FROM <table_name1> 
WHERE <attribute1> NOT IN (SELECT <attribute1> 
          FROM <table_name2>); 

당신이 의지가 도움이되기를 바랍니다. 당신이 집합 연산자를 사용해야하는 경우

+0

SET 연산자를 사용해야합니다. 관계 연산자가 아닙니다. – user4824195

0
SELECT COUNT(<attribute1>) 
FROM <table_name1> 
WHERE <attribute1> MINUS (SELECT <attribute1> 
          FROM <table_name2>); 

https://docs.oracle.com/cd/B19306_01/server.102/b14200/operators005.htm

업데이트 대답

SELECT COUNT(X.id_num) 
(SELECT id_num 
FROM Tree 
WHERE id_num) 
MINUS 
(SELECT id_num 
FROM Bird) AS X 
+0

우리는 MINIS가 DISTINCT를 리턴 할 때 DISTINCT를 사용할 필요가 없습니다. DISTINCT 결과 세트 –

+0

이것은 오류 메시지 - INVALID 관계 연산자입니다. – user4824195

+0

정확한 검색어와 오류를 공유 할 수 있습니까? –