programing

Mysql: 테이블에서 다른 테이블에 없는 행을 선택합니다.

goodsources 2023. 1. 23. 10:13
반응형

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 |
+-----------+----------+------------+

표 2에 없는 표 1 행의 출력 예:

+-----------+----------+------------+
| FirstName | LastName | BirthDate  |
+-----------+----------+------------+
| Yamila    | Diaz     | 1972-03-04 |
+-----------+----------+------------+

아마도 다음과 같은 것이 효과가 있을 것입니다.

SELECT * FROM Table1 WHERE * NOT IN (SELECT * FROM Table2)

열 이름을 기준으로 하위 선택을 수행해야 합니다.*.

예를 들어 다음과 같은 경우id두 테이블에 공통되는 필드에는 다음과 같은 작업을 수행할 수 있습니다.

SELECT * FROM Table1 WHERE id NOT IN (SELECT id FROM Table2)

자세한 예는 MySQL 서브쿼리 구문을 참조하십시오.

다른 설명에서 설명한 바와 같이 300개의 열이 있고 모든 열을 비교하려면(열이 모두 동일한 이름이라고 가정함)NATURAL LEFT JOIN모든 결합 조건을 수동으로 입력할 필요가 없도록 두 테이블 사이의 일치하는 모든 열 이름에 암묵적으로 결합합니다.

SELECT            a.*
FROM              tbl_1 a
NATURAL LEFT JOIN tbl_2 b
WHERE             b.FirstName IS NULL
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 where (FirstName,LastName,BirthDate) not in (select * from Table2);

시험:

SELECT * FROM table1
    LEFT OUTER JOIN table2
    ON table1.FirstName = table2.FirstName and table1.LastName=table2.LastName
    WHERE table2.BirthDate IS NULL

옵션은 다음과 같습니다.

SELECT A.*
    FROM TableA as A
    LEFT JOIN TableB as B
    ON A.id = B.id
    Where B.id Is NULL

Oracle에서는 다음과 같이 대응했습니다.

SELECT a.* 
    FROM tbl1 a 
MINUS 
SELECT b.* 
    FROM tbl2 b;
SELECT a.* FROM 
FROM tbl_1 a
MINUS
SELECT b.* FROM 
FROM tbl_2 b

언급URL : https://stackoverflow.com/questions/11767565/mysql-select-rows-from-a-table-that-are-not-in-another

반응형