[mysql] MySQL : 다른 테이블에없는 행 선택

다른 테이블에 나타나지 않는 한 테이블의 모든 행을 선택하는 방법은 무엇입니까?

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;