TableA
id, name
1, abc
2, cde
3, def
TableB
id, TableA_id, topic
1, 1, blah
2, 1, blah again
3, 2, abcdef
TableB에서 참조가없는 TableA의 모든 레코드를 선택하고 싶습니다. MySQL에서 어떻게합니까?다른 테이블에 참조가없는 레코드를 모두 검색하는 방법은 무엇입니까?
고마워요.
TableA
id, name
1, abc
2, cde
3, def
TableB
id, TableA_id, topic
1, 1, blah
2, 1, blah again
3, 2, abcdef
TableB에서 참조가없는 TableA의 모든 레코드를 선택하고 싶습니다. MySQL에서 어떻게합니까?다른 테이블에 참조가없는 레코드를 모두 검색하는 방법은 무엇입니까?
고마워요.
당신은 좌 가입 및
SELECT
TableA.*
FROM
TableA
LEFT JOIN
TableB
ON
TableB.TableA_id = TableA.id
WHERE
TableB.id IS NULL
SELECT * FROM TableA WHERE id NOT IN (SELECT TableA_id FROM TableB)
SELECT TableA.*
FROM TableA
LEFT JOIN TableB ON (TableA.id = TableB.TableA_id)
WHERE TableB.id IS NULL
Select a.*
From TableA a
Left Outer Join TableB b on b.TableA_id=a.id
Where b.id is NULL
오 나는 왼쪽을 시도하고 있었다 가입 B에 일치하는 기록이없는 이러한 레코드를 선택하여 사용할 수 있지만 내가 놓친 where 절 .. 답변에 많은 감사드립니다. – user187580
위의 작품은 훌륭하지만 빠르지 만, "반대"쿼리 'IS NOT NULL'즉, tableB가 방대한 아이디어 인 경우 가입 속도가 매우 느립니다. – zzapper
'IS NOT NULL '은 간단한'JOIN' (LEFT없이)을 의미합니다. 느린 경우 실행 계획을 확인하고 일치하는 인덱스가 있는지 확인합니다. 또한 - 테이블 B의 모든 열이 필요합니까? 디스크에서 읽으면 쿼리가 느려질 수 있습니다. –