[SQL] SQL - 다른 존재하지 않는 하나 개의 테이블에서 찾기 기록
SQLSQL - 다른 존재하지 않는 하나 개의 테이블에서 찾기 기록
나는 (MySQL은) 다음과 같은 두 가지 SQL 테이블을 가지고 :
Phone_book
+----+------+--------------+
| id | name | phone_number |
+----+------+--------------+
| 1 | John | 111111111111 |
+----+------+--------------+
| 2 | Jane | 222222222222 |
+----+------+--------------+
Call
+----+------+--------------+
| id | date | phone_number |
+----+------+--------------+
| 1 | 0945 | 111111111111 |
+----+------+--------------+
| 2 | 0950 | 222222222222 |
+----+------+--------------+
| 3 | 1045 | 333333333333 |
+----+------+--------------+
어떻게 전화가 누구의 PHONE_NUMBER Phone_book에없는 사람에 의해 만들어진 된 알 수 있습니까? 원하는 출력은 다음과 같습니다
Call
+----+------+--------------+
| id | date | phone_number |
+----+------+--------------+
| 3 | 1045 | 333333333333 |
+----+------+--------------+
어떤 도움이 많이 주시면 감사하겠습니다.
해결법
-
==============================
1.효율성을 다양한 쿼리 최적화이며, 당신의 두 테이블의 상대적 크기 얼마나 좋은에 따라이 일을 여러 가지 방법이있다 :
효율성을 다양한 쿼리 최적화이며, 당신의 두 테이블의 상대적 크기 얼마나 좋은에 따라이 일을 여러 가지 방법이있다 :
전화 번호부가 매우 짧은 경우이 가장 짧은 문장이며, 빠른을 할 수있다 :
SELECT * FROM Call WHERE phone_number NOT IN (SELECT phone_number FROM Phone_book)
양자 택일 (Alterlife 덕분에)
SELECT * FROM Call WHERE NOT EXISTS (SELECT * FROM Phone_book WHERE Phone_book.phone_number = Call.phone_number)
또는 (WOPR 덕분에)
SELECT * FROM Call LEFT OUTER JOIN Phone_Book ON (Call.phone_number = Phone_book.phone_number) WHERE Phone_book.phone_number IS NULL
(다른 사람이 말했듯이 '*'당신이 원하는 바로 열 수 없습니다를 선택하는 일반적으로 가장 좋은, 그 무시)
-
==============================
2.
SELECT Call.ID, Call.date, Call.phone_number FROM Call LEFT OUTER JOIN Phone_Book ON (Call.phone_number=Phone_book.phone_number) WHERE Phone_book.phone_number IS NULL
쿼리 최적화가 마법을 할 수 있도록 하위 쿼리를 제거해야합니다.
그것은 당신의 암호를 해독 할 수 있기 때문에, 피할 "SELECT *"만약 누군가가 달라져 기본 테이블이나 뷰 (그리고 비효율적).
-
==============================
3.아래의 코드는 더 큰 데이터 세트를 처리 할 때 위에서 제시 한 답변보다 약간 더 효율적인 것입니다.
아래의 코드는 더 큰 데이터 세트를 처리 할 때 위에서 제시 한 답변보다 약간 더 효율적인 것입니다.
SELECT * FROM Call WHERE NOT EXISTS (SELECT 'x' FROM Phone_book where Phone_book.phone_number = Call.phone_number)
-
==============================
4.
SELECT DISTINCT Call.id FROM Call LEFT OUTER JOIN Phone_book USING (id) WHERE Phone_book.id IS NULL
이것은 당신의 Phone_book 테이블에 누락 된 추가 ID-S를 반환합니다.
-
==============================
5.내 생각
내 생각
SELECT CALL.* FROM CALL LEFT JOIN Phone_book ON CALL.id = Phone_book.id WHERE Phone_book.name IS NULL
-
==============================
6.
SELECT t1.ColumnID, CASE WHEN NOT EXISTS( SELECT t2.FieldText FROM Table t2 WHERE t2.ColumnID = t1.ColumnID) THEN t1.FieldText ELSE t2.FieldText END FieldText FROM Table1 t1, Table2 t2
-
==============================
7.
SELECT name, phone_number FROM Call a WHERE a.phone_number NOT IN (SELECT b.phone_number FROM Phone_book b)
-
==============================
8.또한,
또한,
select id from call minus select id from phone_number
from https://stackoverflow.com/questions/367863/sql-find-records-from-one-table-which-dont-exist-in-another by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 외래 키 제약은 사이클 또는 여러 개의 캐스케이드 경로의 원인? (0) | 2020.03.08 |
---|---|
[SQL] MySQL의에서 누적 합계 열 만들기 (1) | 2020.03.08 |
[SQL] 당신은 FROM 절에 업데이트를 목표 테이블을 지정할 수 없습니다 (0) | 2020.03.08 |
[SQL] SQL은 가입 : 사용 ON 또는 WHERE 사이에 차이가? (0) | 2020.03.08 |
[SQL] SQLSERVER에서 ListAGG (0) | 2020.03.08 |