2014-09-18 2 views
0

MYSQL 데이터베이스에 'entries'테이블이 있습니다. 항목의 ID를 외래 키로 사용하여 이러한 항목에 대한 활동을 기록하는 다른 테이블이 있습니다. 두 번째 테이블에 나타나지 않는 첫 번째 테이블 항목을 선택하고 싶습니다.다른 테이블에없는 데이터베이스 테이블 행을 선택하십시오.

SQL을 사용하여 어떻게 이런 일이 발생합니까? 두 테이블을 반복하여 모든 항목을 다른 모든 항목과 비교해야합니까? 이 작업을 수행하는 더 쉬운 방법이 있습니까?

ex. 항목 데이터 열과 사용자 이름 열이있는 테이블이 있습니다. 항목 ID 열과 사용자 ID 열이있는 다른 테이블이 있습니다. 주어진 사용자 ID로 두 번째 테이블에 나타나지 않는 모든 항목을 첫 번째 표에서 선택하고 싶습니다.

미리 감사드립니다. 나는 잠시 동안이 실험에 어려움을 겪어왔다. 어떻게 든 두 테이블에 합류해야한다고 생각하니?

답변

3

이것을 달성하는 여러 가지 방법은 NOT IN, NOT EXISTS, LEFT JOIN/NULL입니다. 여기 NOT EXISTS 하나입니다 : 내가 이해, 당신은 외래 키는 다른 테이블에서 아무것도 일치하지 않는 모든 행을 선택합니다

SELECT * 
FROM FirstTable T 
WHERE NOT EXISTS (
    SELECT * 
    FROM SecondTable T2 
    WHERE T.Id = T2.Id 
    ) 
+0

모든 열을 선택할 필요가 없습니다. SELECT 1 FROM .... 대신 – Gervs

+0

을 사용하십시오. Gervs를 명확히 할 수 있습니까? – shane

+1

@ user3667450 -'EXISTS'를 사용할 때'SELECT *'또는'SELECT 1'을 사용할 수 있다는 오래된 논쟁이 있습니다. 대부분의 현대 DBMS는 실제로 이러한 쿼리에 대해 동일한 실행 계획을 생성합니다. 나는'SELECT *'의 가독성을 선호하지만 둘 다 잘 작동한다. 그래서 당신이 선호한다면'... 존재하지 않는 곳 (SELECT 1 ...')이라고 쓸 수 있습니다. – sgeddes

관련 문제