복붙노트

[SQL] 어떻게 가입하여 다른 테이블에서 존재하지 않는 데이터를 찾는 방법은?

SQL

어떻게 가입하여 다른 테이블에서 존재하지 않는 데이터를 찾는 방법은?

내가 좋아하는 외모 두 개의 테이블 TABLE1이있다 :

id      name     address
1       mm     123
2       nn     143

및 TABLE2 w / C 외모와 같은 :

name     age
mm      6
oo      9

나는 TABLE2로 TABLE1을 비교하여 비 기존의 이름을 싶어.

그러니까 기본적으로, 나는 / C는 TABLE2에 존재하지 않는 NN 이름이 승, 출력은 다음과 같이한다, 2 행을 얻을 수있다 :

id      name     address
2      nn      143

나는이 시도했지만 작동하지 않습니다 :

SELECt  w.* FROM TABLE1 W INNER JOIN TABLE2 V
  ON W.NAME <> V.NAME

그것은 여전히 ​​기존 레코드를 얻고있다.

해결법

  1. ==============================

    1.내부는 여기에 도움이되지 않습니다 가입하세요.

    내부는 여기에 도움이되지 않습니다 가입하세요.

    이 문제를 해결하는 한 가지 방법은 LEFT를 사용하는 것입니다 가입 :

    SELECT w.* 
    FROM TABLE1 W 
    LEFT JOIN TABLE2 V ON W.name = V.name
    WHERE ISNULL(V.name);
    
  2. ==============================

    2.당신이 필요로하는 관계 연산자는 반 차이 일명 antijoin입니다.

    당신이 필요로하는 관계 연산자는 반 차이 일명 antijoin입니다.

    대부분의 SQL 제품은 명시 적 반 차이 운영자 또는 키워드 부족하다. FWIW 진정한 관계형 언어 튜토리얼, 표준 SQL-92는) 세 L 조인 술어하지만, 다른 생각을 유혹하지만, NOT MATCH (하위 쿼리)에 대한 의미가 반 차이와 동일하지 않습니다 일치 (하위 쿼리가 있습니다 (하나이 없습니다 D가 성공적으로)을하지 MATCHING 반 차이를 사용합니다.

    세미 차이는 물론 다른 SQL 술어를 사용하여 작성 될 수있다. 일반적으로 본 가장은 다음과 같습니다 외부 밀접하게 다음 또는 IN (하위 쿼리) EXISTS, WHERE 절에 널 (null)에 대한 테스트로 가입 할 수 있습니다. 당신의 SQL 제품 지원을하고 다시는 데이터에 따라 경우 (오라클에서 MINUS에 해당)를 제외하고 사용하는 것은 또 다른 가능한 접근 방법이다 (특히, 두 테이블의 제목이 동일한 경우).

    (가) 조항이 작성된 코드에 더 가깝게하고, 예를 들어 조인 된 테이블을 통해 투사 발생하지 않습니다에 가입하기 때문에 개인적으로, 나는 가입 반 차이를 SQL에서 사용하기 위해 존재 선호

    SELECT *
      FROM TABLE1 W
     WHERE NOT EXISTS (
                       SELECT * 
                         FROM TABLE2 V
                        WHERE W.NAME = V.NAME
                      );
    

    (외부에 같은 조인 방법) NOT IN (하위 쿼리)와 마찬가지로, 당신은 하위 쿼리 내에 WHERE 절은 널 (힌트를 포함하는 경우 각별히주의해야합니다 WHERE 하위 쿼리들을 평가의 UNKNOWN 인해 널 (null)의 존재에 절 다음 경우 ) 예상치 못한 결과를 얻을 수있는 존재로 FALSE로 강제됩니다.

    UPDATE (3 년)에 : 당신이 null로 예상치 못한 결과에 대해 걱정 (당신이해야한다)이라면 정지 전체를 사용하여 더 읽기되고 있기 때문에 NOT IN (하위 쿼리) 선호에 이성을 상실 이후, 나는 더 많은했던 것 여러 해 전에.

    예컨대 W 및 V 범위의 변수에 대한 요구가없는 경우, 하나의 방법은 그것을 더 읽을

    SELECT * FROM TABLE1 WHERE name NOT IN ( SELECT name FROM TABLE2 );
    
  3. from https://stackoverflow.com/questions/7494586/how-to-find-non-existing-data-from-another-table-by-join by cc-by-sa and MIT license