한 테이블에서 다른 테이블에 존재하지 않는 모든 레코드를 선택하는 방법은 무엇입니까?

table1 (id, name) table2 (id, name)

쿼리:

SELECT name   
FROM table2  
-- that are not in table1 already
질문에 대한 의견 (1)
해결책
SELECT t1.name
FROM table1 t1
LEFT JOIN table2 t2 ON t2.name = t1.name
WHERE t2.name IS NULL

Q: 여기서 무슨 일이 일어나고 있나요?

A: 개념적으로, 우리는 table1에서 모든 행을 선택하고 각 행에 대해 table2에서 name 열에 대해 동일한 값을 가진 행을 찾으려고 시도합니다. 그런 행이 없으면 결과의 table2 부분을 해당 행에 대해 비워둡니다. 그런 다음 결과에서 일치하는 행이 존재하지 않는 행만 선택하여 선택을 제한합니다. 마지막으로, 결과에서 name 열(table1에서 존재한다고 확신하는 열)을 제외한 모든 필드를 무시합니다.

이 방법이 모든 경우에 가장 성능이 좋은 방법은 아니지만, 기본적으로 ANSI 92 SQL을 구현하려는 모든 데이터베이스 엔진에서 작동해야 합니다.

해설 (14)

다음 중 하나를 수행할 수 있습니다.

SELECT name
FROM table2
WHERE name NOT IN
    (SELECT name 
     FROM table1)

또는

SELECT name 
FROM table2 
WHERE NOT EXISTS 
    (SELECT * 
     FROM table1 
     WHERE table1.name = table2.name)

이를 달성하는 3가지 방법은 이 질문을 참조하세요.

해설 (6)

39 점, 2 위로 마친 것으로 충분한 담당자별로 don& 별로 없는 내가 그 답이 있다. 하지만 저는 반대합니다 주석이 있는 맨 위에 그 답이 있다. 두 번째 대답:

SELECT name
FROM table2
WHERE name NOT IN
    (SELECT name 
     FROM table1)

실제로 훨씬 효과적입니다. # 39 m, t know why i don& I& # 39 를 기록, 차이는 있지만, 최대한 많은 것을 800k+ 함께 주어진 오토메이티드 게시하기를 2 위. 그냥 내 0.02 달러

해설 (3)

이것은 마이너스 연산으로 얻을 수 있는 순수한 집합 이론입니다.

select id, name from table1
minus
select id, name from table2
해설 (4)

특히 대한 조심하세요. "이름" 필드에 경우 '에서 "' table1" '에서 깜짝 놀랄 만한 null 포함되어 있습니다. 가장 좋은 것은:

SELECT name
FROM table2
WHERE name NOT IN
    (SELECT ISNULL(name ,'')
     FROM table1)
해설 (1)

39 의 here& 어떤 방법이 주효했는가 best for me.

SELECT *
FROM @T1
EXCEPT
SELECT a.*
FROM @T1 a
JOIN @T2 b ON a.ID = b.ID

이는 다른 방법을 두 배 이상 빨리 도망치기만하고

해설 (1)

'또는' 마이너스 '에서 사용할 수 있습니다' 에 따르면, 그들은 모두 동일해집니다 oralce 제외한 mssql:

http://blog.sqlauthority.com/2008/08/07/sql-server-except-clause-in-sql-server-is-similar-to-minus-clause-in-oracle/

해설 (0)

나를 위해 사용할 수 있는 날카로운

SELECT * 
FROM [dbo].[table1] t1
LEFT JOIN [dbo].[table2] t2 ON t1.[t1_ID] = t2.[t2_ID]
WHERE t2.[t2_ID] IS NULL
해설 (0)

39 m) 로 하고, i& 재 게시 (이후 I& 아직 안 좋아 # 39 m, 충분한 설명) 에 대해 더 나은 사람이 필요한 경우 올바른 answer.in 줄 알았다.

SELECT temp_table_1.name
FROM original_table_1 temp_table_1
LEFT JOIN original_table_2 temp_table_2 ON temp_table_2.name = temp_table_1.name
WHERE temp_table_2.name IS NULL

39 에서 ve seen 구문 및 I&, mySQL 에서 필요로 하는 듯 하지만, 그 사이에 쉼표 스크루이트 포지셔닝하십시오 테이블 이름 공간.

The bottom line 은 나쁜거라 변수 이름을 사용할 때 찻입 질문을합니다. 내 com/go/4e6b330a_kr 더 해야 한다. 왜 우리가 필요로 하는 사람이 쉼표 (,) 또는 no 쉼표 및 설명해야 한다.

해설 (0)

쿼리하지 참조.

SELECT * FROM Table1 WHERE
id NOT IN (SELECT 
        e.id
    FROM
        Table1 e
            INNER JOIN
        Table2 s ON e.id = s.id);

개념적으로 다음과 같습니다. 다음 주 에 있는 기록과 일치하는 기록을 불러오기 서브케리 가져오는 쿼리하지 서브케리 않고 있다.

해설 (0)