[SQL] 어떻게 다른 테이블에 존재하지 않는 한 테이블의 모든 레코드를 선택하려면?
SQL어떻게 다른 테이블에 존재하지 않는 한 테이블의 모든 레코드를 선택하려면?
질문:
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 : 개념적으로, 우리는 표에서 모든 행을 선택하고 각 행에 대해 우리는 이름 컬럼에 대해 동일한 값을 표 2에있는 행을 찾기 위해 시도합니다. 그러한 행이없는 경우, 우리는 우리의 결과를 표 2 부분이 해당 행 비워 둡니다. 그럼 우리가 일치하는 행이 존재하지 않는 결과에서 행만을 선택하여 우리의 선택을 제한. 마지막으로, 우리는 이름 열 (표 1에서 우리의 존재를 확신 하나,)를 제외하고 우리의 결과에서 모든 필드를 무시합니다.
이 모든 경우에 가장 성능이 좋은 방법이 가능하지 않을 수 있지만, 그것은 시도 ANSI 92 SQL을 구현하기 위해 어느 것을 기본적으로 모든 데이터베이스 엔진에서 작동합니다
-
==============================
2.당신도 할 수있다
당신도 할 수있다
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 개 기술은 이러한 목표를 달성하기 위해이 질문을 참조
-
==============================
3.나는 2 대답을 투표를하기에 충분한 담당자 포인트가 없습니다. 하지만 상단의 대답에 의견에 동의해야합니다. 두 번째 답 :
나는 2 대답을 투표를하기에 충분한 담당자 포인트가 없습니다. 하지만 상단의 대답에 의견에 동의해야합니다. 두 번째 답 :
SELECT name FROM table2 WHERE name NOT IN (SELECT name FROM table1)
훨씬 더 효율적인 연습입니다. 왜 그런지 모르겠지만, 800K + 기록에 대해 그것을 실행하고있어 차이가 2 대답에 주어진 장점은 위의 게시와 함께 엄청난입니다. 그냥 내 $ 0.02
-
==============================
4.이것은 당신이 마이너스 작동을 달성 할 수있는 순수한 집합 이론이다.
이것은 당신이 마이너스 작동을 달성 할 수있는 순수한 집합 이론이다.
select id, name from table1 minus select id, name from table2
-
==============================
5.
SELECT <column_list> FROM TABLEA a LEFTJOIN TABLEB b ON a.Key = b.Key WHERE b.Key IS NULL;
https://www.cloudways.com/blog/how-to-join-two-tables-mysql/
-
==============================
6.함정을 조심. 표에서 필드 이름이 널 (null)를 포함하는 경우에 당신은 놀라움에에 있습니다. 더 나은입니다 :
함정을 조심. 표에서 필드 이름이 널 (null)를 포함하는 경우에 당신은 놀라움에에 있습니다. 더 나은입니다 :
SELECT name FROM table2 WHERE name NOT IN (SELECT ISNULL(name ,'') FROM table1)
-
==============================
7.다음은 나에게 가장 일거야.
다음은 나에게 가장 일거야.
SELECT * FROM @T1 EXCEPT SELECT a.* FROM @T1 a JOIN @T2 b ON a.ID = b.ID
이 두 배 빠른 속도로 내가 노력 다른 방법으로 이상이었다.
-
==============================
8.당신은 오라클에서 MSSQL 또는 MINUS를 제외하고 사용할 수 있습니다, 그들은 동일한있어서,로이다 :
당신은 오라클에서 MSSQL 또는 MINUS를 제외하고 사용할 수 있습니다, 그들은 동일한있어서,로이다 :
http://blog.sqlauthority.com/2008/08/07/sql-server-except-clause-in-sql-server-is-similar-to-minus-clause-in-oracle/
-
==============================
9.나를 위해 날카로운 그 작업
나를 위해 날카로운 그 작업
SELECT * FROM [dbo].[table1] t1 LEFT JOIN [dbo].[table2] t2 ON t1.[t1_ID] = t2.[t2_ID] WHERE t2.[t2_ID] IS NULL
-
==============================
10.나는 다른 더 나은 설명 필요하다고 생각하는 경우 누군가에 ... (내가 코멘트에 아직 충분히 냉각 아니에요 이후) 정답에 다시 게시하겠습니다.
나는 다른 더 나은 설명 필요하다고 생각하는 경우 누군가에 ... (내가 코멘트에 아직 충분히 냉각 아니에요 이후) 정답에 다시 게시하겠습니다.
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
그리고 MySQL의 테이블 이름 사이에 쉼표를 필요로에서 구문을 본 적이 있지만 sqlLite에이 공간을 택한 것으로 보였습니다.
당신이 질문에 잎 나쁜 변수 이름을 사용하는 경우 결론입니다. 내 변수는 더 의미를해야한다. 우리는 쉼표 또는 전혀 쉼표가 필요한 이유 그리고 누군가가 설명해야한다.
-
==============================
11.쿼리를 참조하십시오 :
쿼리를 참조하십시오 :
SELECT * FROM Table1 WHERE id NOT IN (SELECT e.id FROM Table1 e INNER JOIN Table2 s ON e.id = s.id);
개념적으로는 다음과 같습니다 서브 쿼리에없는 레코드를 가져 오는 주요 쿼리에서 다음 일치하는 하위 쿼리의 기록과를 가져오고 있습니다.
from https://stackoverflow.com/questions/2686254/how-to-select-all-records-from-one-table-that-do-not-exist-in-another-table by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL은 IN 성능 대 가입? (0) | 2020.03.17 |
---|---|
[SQL] 잠금 대기 제한 시간 초과 "얻기; 내가 트랜잭션을 사용하지 않는 경우에도 "트랜잭션을 다시 시작합니다 (0) | 2020.03.17 |
[SQL] SQL Server는 자기가 가입 재귀 (0) | 2020.03.17 |
[SQL] MySQL과 PostgreSQL을에 절, PostgreSQL을에 왜 오류에 의해 그룹? (0) | 2020.03.17 |
[SQL] 에 Upserting MS 액세스 (0) | 2020.03.17 |