2011-10-05 7 views
1
내가 정수의 목록을 받아 SQL 서버 2008 R2를 사용하여 교차하여 몇 건의 SELECT을 연결하는 쿼리를 구축 할 필요가

를 생성합니다. 여기에 기본적으로 제가 구축 할 필요가 쿼리하지만 SELECTS의 수는 달라집니다 :SQL 서버 루프는 쿼리

SELECT col1 
FROM table1 
WHERE col2 = 1 

INTERSECT 

SELECT col1 
FROM table1 
WHERE col2 = 2 

INTERSECT 

SELECT col1 
FROM table1 
WHERE col2 = 3 

내가 ID의 쉼표로 구분 된 목록을 가지고 그들에서 테이블을 작성하는 테이블 반환 함수가 있습니다. 하지만 기본적으로 SQL 문을 작성한 다음 실행하려면 해당 테이블 반환 함수를 반복해야합니다.

어떻게 그 루프를 만들어 가야합니까? 또는이 작업을 수행 할 수있는 더 좋은 방법이있을 수 있습니다 (코드가 더 좋으면 할 수 있습니다).

편집 : 가 INTERSECT를 사용하는 목적을 명확히하기 위해, 여기에 내가 뭘하는지입니다. 내가 사용하고있는 구조는 속성 (크기, 색상 등)을 선택하여 하위 제품과 상위 제품을 연관시키는 데 사용됩니다. 각 속성 조합에 대해 하나의 일치하는 하위 제품이 있습니다. 따라서 각 select는 개별 속성 값에 매핑 된 모든 하위 제품을 선택합니다. 그런 다음 각 속성의 조합과 일치하는 하나의 하위 제품을 찾기 위해 각 속성의 교차점을 찾아야합니다. 쿼리를 수행하는 더 좋은 방법이 있다면, 나는 그것에 대해 공개적이다. 내부 조인은 같은 결과가되지만 여전히 동일한 반복이 필요하다는 것을 알고 있습니다.

+0

모든 이유는 선택인가? –

+0

내가 사용하고있는 구조는 속성 (크기, 색상 등)을 선택하여 하위 제품과 상위 제품을 연결하는 데 사용됩니다. 각 속성 조합에 대해 하나의 일치하는 하위 제품이 있습니다. 따라서 각 select는 개별 속성 값에 매핑 된 모든 하위 제품을 선택합니다. 그런 다음 각 속성의 조합과 일치하는 하나의 하위 제품을 찾기 위해 각 속성의 교차점을 찾아야합니다. 쿼리를 수행하는 더 좋은 방법이 있다면, 나는 그것에 대해 공개적이다. 내부 조인은 같은 결과가되지만 여전히 동일한 반복이 필요하다는 것을 알고 있습니다. – jwynveen

+0

"In"키워드를 사용하고 Id 목록을 테이블로 전달하지 않는 이유는 무엇입니까? –

답변

2

임시 테이블은 #temp이라고 가정하면이 작업을 수행 할 수없는 이유

SELECT col1 
    FROM table1 t 
     INNER JOIN 
     #temp v 
     ON (t.col2 = v.col2) 
GROUP BY 
     col1 
HAVING COUNT(*) = (SELECT COUNT(*) FROM #temp) 
+0

와우! 그 단순함은 놀랍습니다. 그리고 나의 초기 테스트는 그것이 내가 필요로하는 것을 보여줍니다. 지금하고있는 하나의 시나리오보다 더 복잡한 시나리오를 테스트해야하지만 트릭을 수행해야하는 것처럼 보입니다. 고맙습니다! HAVING 절이 어떻게 작동하는지 자세히 설명해 주시겠습니까? 그것은 내가 이해하지 못하는 부분이고 모든 일을하는 부분 인 것 같습니다. – jwynveen

+0

HAVING을 사용하면 WHERE 절에있는 것처럼 집계 함수를 사용할 수 있습니다. 나는 종종 그것을 사용하여 중복 된 레코드를 찾는다. "SELECT x FROM tbl GROUP x x BY COUNT (*)> 1". –