source

MySQL 다른 테이블에 일치하는 열이 없는 행 선택

manycodes 2023. 9. 18. 22:33
반응형

MySQL 다른 테이블에 일치하는 열이 없는 행 선택

저는 지금까지 이것을 파악할 수 없는 것 같습니다.저는 두 개의 테이블을 결합하고 B 테이블에 일치하는 열이 없는 A 테이블의 행만 선택하려고 합니다.예를 들어, 사용자 테이블과 전송된 테이블이 있다고 가정합니다.

users테이블에는 다음과 같은 열이 있습니다.id, username
sent테이블에는 다음과 같은 열이 있습니다.id, username

모든 행을 선택합니다.users어디에username존재하지 않음sent테이블. 그렇다면.tomusers그리고 안에sent그는 선택되지 않을 것입니다.만약 그가 안에users안에 없는sent그는 선발될 것입니다.이것을 시도해 보았지만 전혀 효과가 없었습니다.

SELECT pooltest.name,senttest.sentname 
FROM pooltest,senttest 
WHERE pooltest.name != senttest.sentname

일반적으로 다음을 사용합니다.NOT EXISTS이런 유형의 쿼리에 대해

SELECT p.Name
FROM   pooltest p
WHERE  NOT EXISTS (SELECT s.Name
                   FROM   senttest s
                   WHERE  s.Name = p.Name)

대안은 a를 사용하는 것일 것입니다.LEFT OUTER JOIN확인합니다.NULL

SELECT p.Name
FROM   pooltest p
       LEFT OUTER JOIN senttest s ON s.Name = p.Name
WHERE  s.Name IS NULL

사용 중인 암묵적 조인 구문은 더 이상 쓸모가 없는 것으로 간주되므로 명시적 조인으로 대체해야 합니다.

다음 SQL을 사용해 보십시오.

SELECT users.username
FROM  users
LEFT JOIN sent ON sent.username = users.username
WHERE sent.username IS NULL;

제 생각에 더 좋은 방법은 다음과 같습니다.

SELECT users.username
FROM  users
LEFT JOIN sent ON sent.id = users.id
WHERE sent.id IS NULL;

두 ID 필드 모두 색인화되어 있으므로(기본 키라고 생각했습니다), 이 쿼리는 제가 제안한 첫 번째 쿼리보다 더 나은 최적화가 될 것입니다.

제 첫 번째 제안이 당신에게 더 좋다고 생각하실지 모르지만, 그것은 당신의 지원에 대한 요구사항에 달려있습니다.

어쩌면 이게 당신을 도울 수 있을지도..

저도 같은 문제가 있었는데 이 쿼리를 사용해서 해결했습니다.

INSERT INTO tbl1 (id,name) SELECT id,name from tbl2 where (name) not in(select name from tbl1);

이것이 당신의 문제를 해결해 주기를 바랍니다.

언급URL : https://stackoverflow.com/questions/10968767/mysql-select-rows-that-do-not-have-matching-column-in-other-table

반응형