2014-04-13 4 views
0

1에서 10까지의 항목이있는 Table_1 테이블이 있으며 열에 1 - 10의 값을 사용하는 20 개의 다른 테이블이 있습니다. Table_1의 해당 항목이 누락 된 항목이있는 모든 테이블 이름을 나열하고 싶습니다.테이블 이름 목록에 SQL 쿼리 도움이 필요합니다.

는 예 :

Table_1 has values 1- 10 
Table_2 is using 2 and 5 
Table_3 is using 7,9 and 28 
Table_4 is using 2,7,9 
Table_5 is using 7, 9,76 

그래서 내 쿼리의 출력은 나에게 table_3 및 Table_5을 제공한다

+0

http://en.wikipedia.org/wiki/Join_%28SQL%29에 대해 자세히 알아보고 자신 만의 질문에 답변 할 수 있습니다. –

+0

나는 조인에 관한 모든 것을 읽었으나 질의 결과에서 tablenames를 나열하는 방법을 알아낼 수 없다. – user3529359

+0

집합 이론에 대한 기본적인 이해가 도움이된다. Venn 다이어그램에서 각 테이블을 원으로 간주하고 table_1과 겹치지 않는 테이블 2/3/4/5 부분을 찾고 있습니다 –

답변

0

여기에 하나 개의 방법이 작동합니다

SELECT DISTINCT TableName 
FROM (SELECT 'Table_2' as TableName, col 
     FROM Table_2 
     UNION ALL 
     SELECT 'Table_3' as TableName, col 
     FROM Table_3 
     /*repeat for all tables*/ 
     UNION ALL 
     SELECT 'Table_20' as TableName, col 
     FROM Table_20) x 
     LEFT JOIN Table_1 t ON x.col = t.col 
WHERE t.col is NULL 
+0

이 쿼리는 올바르게 작동합니다. 그러나 모든 테이블 이름을 하드 코드하지 않고 대신 sys.all_objects의 모든 테이블을 나열하고 한 번에 한 행을 검색하기 위해 #table을 사용하는 방법이 있습니까? 미리 감사드립니다 – user3529359

+0

동적 SQL을 사용하지 않아도됩니다. –

0

. SQL Server/Oracle을 사용하는 경우 마이너스 및/또는 집합 연산자를 사용할 수도 있습니다. 어떤 데이터베이스를 사용하고 있는지 잘 모릅니다.

select 'in tbl 2 but not tbl 1' as which, numcol from table_2 where numcol not in (select numcol from table_1) 
union all 
select 'in tbl 3 but not tbl 1' as which, numcol from table_3 where numcol not in (select numcol from table_1) 
union all 
select 'in tbl 4 but not tbl 1' as which, numcol from table_4 where numcol not in (select numcol from table_1) 
union all 
select 'in tbl 5 but not tbl 1' as which, numcol from table_5 where numcol not in (select numcol from table_1) 
관련 문제