다른 테이블에 나타나지 않는 한 테이블의 모든 행을 선택하는 방법은 무엇입니까?
1 번 테이블:
+-----------+----------+------------+
| FirstName | LastName | BirthDate |
+-----------+----------+------------+
| Tia | Carrera | 1975-09-18 |
| Nikki | Taylor | 1972-03-04 |
| Yamila | Diaz | 1972-03-04 |
+-----------+----------+------------+
표 2 :
+-----------+----------+------------+
| FirstName | LastName | BirthDate |
+-----------+----------+------------+
| Tia | Carrera | 1975-09-18 |
| Nikki | Taylor | 1972-03-04 |
+-----------+----------+------------+
Table2에없는 Table1의 행에 대한 출력 예 :
+-----------+----------+------------+
| FirstName | LastName | BirthDate |
+-----------+----------+------------+
| Yamila | Diaz | 1972-03-04 |
+-----------+----------+------------+
아마도 다음과 같이 작동 할 것입니다.
SELECT * FROM Table1 WHERE * NOT IN (SELECT * FROM Table2)
답변
다른 주석에서 언급 한대로 300 개의 열이 있고 모든 열을 비교하려는 경우 (열이 모두 동일한 이름이라고 가정) a NATURAL LEFT JOIN
를 사용 하여 두 테이블 사이에서 일치하는 모든 열 이름을 암시 적으로 조인 할 수 있습니다. 모든 조인 조건을 수동으로 지루하게 입력 할 필요가 없습니다.
SELECT a.*
FROM tbl_1 a
NATURAL LEFT JOIN tbl_2 b
WHERE b.FirstName IS NULL
답변
이 아니라 열 이름을 기반으로 하위 선택을 수행해야합니다 *
.
예를 들어 id
두 테이블에 공통된 필드 가있는 경우 다음을 수행 할 수 있습니다.
SELECT * FROM Table1 WHERE id NOT IN (SELECT id FROM Table2)
더 많은 예제 는 MySQL 하위 쿼리 구문 을 참조하십시오 .
답변
SELECT *
FROM Table1 AS a
WHERE NOT EXISTS (
SELECT *
FROM Table2 AS b
WHERE a.FirstName=b.FirstName AND a.LastName=b.Last_Name
)
EXISTS
너를 도울 것이다…
답변
표준 LEFT JOIN은 문제를 해결할 수 있으며, 조인의 필드가 인덱싱 된
경우 더 빠릅니다.
SELECT *
FROM Table1 as t1 LEFT JOIN Table2 as t2
ON t1.FirstName = t2.FirstName AND t1.LastName=t2.LastName
WHERE t2.BirthDate Is Null
답변
시험:
SELECT * FROM table1
LEFT OUTER JOIN table2
ON table1.FirstName = table2.FirstName and table1.LastName=table2.LastName
WHERE table2.BirthDate IS NULL
답변
이 간단한 쿼리를 시도하십시오. 완벽하게 작동합니다.
select * from Table1 where (FirstName,LastName,BirthDate) not in (select * from Table2);
답변
이것은 Oracle에서 나를 위해 일했습니다.
SELECT a.*
FROM tbl1 a
MINUS
SELECT b.*
FROM tbl2 b;