2014-11-24 4 views
0

이전 프로젝트에서 동기화를 다시 작성하고 가능한 한 이전 코드와 비슷하게 유지하려고합니다.FilterClause에서 내부 조인 사용

이전 코드에는 FilterClause과 유사한 SQL 코드가 있습니다. 그리고 지금까지는 이전 코드 선택 식을 해당 FilterClause로 변환하는 것이 매우 간단했습니다. 예를 들어 :

FilterClauses 정의 가져 또는 WHERE 절 SQL을 설정 ...

그러나
...FilterClause = "num_id = @id"; 

가, 지금은 문제로 실행 한 :

SELECT * FROM dbo.table_a WHERE num_id = @id 

가로 번역 한 (WHERE 키워드없이) 결과 테이블을 기본 테이블에서 필터링하는 데 사용됩니다. 하지만 지금 내 SQL 표현식은 다음과 같습니다

SELECT * 
FROM dbo.table_a 
INNER JOIN 
(
SELECT DISTINCT(num_id) 
FROM dbo.link_table_ab 
WHERE link_table_ab.b_index = 5 
) T2 ON table_a.num_id= T2.num_id 

그래서 문제는 어떻게해야합니까 ... 차 조회에는 WHERE이 없다는 것입니다?

답변

1

WHERE 절에 하위 쿼리가있는 IN을 사용하면 본질적으로 동일한 논리를 구현할 수 있습니다. 이 방법이 효과가 있습니까?

SELECT * 
FROM dbo.table_a 
WHERE table_a.num_id IN (SELECT num_id 
         FROM dbo.link_table_ab 
         WHERE link_table_ab.b_index = 5 
         ) 
+0

얼마나 큰 영향을 주나요? – Markus

+0

@Markus. . . 원래 프레임 된 것처럼 결합과 매우 유사해야합니다. 때로는'존재한다'는'in'보다 조금 빠르지 만, 그것은 데이터와 시스템에 의존 할 수 있습니다. –

+0

DISTINCT가 문제를 일으키지 않습니까? – Markus