2009-08-27 7 views
1

X, Y, Z 및 1,2와 같은 값의 배열이 두 개 있습니다. 두 개의 열이있는 테이블 A가 있습니다. 모든 조합이 포함 된 테이블 A 레코드가 유효한지 확인하고 싶습니다. 중복의. 예 :테이블의 레코드 조합 확인

X 1 

Y 1 

Z 1 

X 2 

Y 2 

Z 2 

미리 감사드립니다.

답변

1

모든 데이터 세트에서 작동하며 테이블에 포함될 값을 알 수 있다고 가정하지 않습니다.

쿼리는 누락 된 모든 행을 반환합니다. 이것을 insert 문으로 쉽게 바꿀 수 있습니다.

SELECT * 
FROM 
(select * from (SELECT DISTINCT col1 FROM table1) CROSS JOIN (SELECT DISTINCT col2 FROM table1)) AS t1 
LEFT OUTER JOIN table1 ON t1.col1 = table1.col1 AND t1.col2 = table1.col2 
WHERE 
table1.col1 is null 
+0

"oracle"로 질문 한 것을 보았습니다. 이 쿼리는 SQL Server 용으로 디자인되었습니다. 관계없이 원칙은 동일합니다. –

+0

답장을 보내 주셔서 감사합니다. 나는 질의를 시도하고 설명 된대로 잘 작동했다. 실제로 이러한 배열 값은 외부에서 오는 것이므로 테이블 자체를 기반으로 조합을 비교하는 것보다 쿼리 래도에 전달해야합니다. 또한 이러한 조합은 동적이며 향후 확장 될 것입니다. – Lico

+0

나는 테이블에 비교할 행이 없다는 것을 언급하고 싶다. 예 : 값이 X 인 행이 없을 수도 있고 여전히이 행을 비교하려고합니다. 그래서 행 집합과 X의 비교가 누락되었을 수 있습니다. – Lico

1

다음은 아무리에게 값을 작동합니다 :

select col1, col2 
from (select distinct col1 from combtest), (select distinct col2 from combtest) 
minus 
select col1, col2 
from combtest 

먼저 그 다음 가능한 조합을 얻는 실제 조합을 뺍니다.

+0

아주 좋습니다. T-SQL에 마이너스 연산자가 있었으면 좋겠다. – Hafthor

관련 문제