파생 테이블 쿼리에 값을 전달하는 방법이 있습니까?파생 테이블에 값 전달
파생 테이블에서 외부 쿼리의 값 ([docSVsys].[sID])
을 참조합니다.
예 내가이 쿼리가 더 루프를 단순화 할 수있어 :Msg 4104, Level 16, State 1, Line 7 The multi-part identifier "docSVsys.sID" could not be bound.
는 오류가 발생합니다.
루프를 만들어서 변환하려고하는 커서를 가져야합니다.
select top 10 [docSVsys].[sID], [sI].[count]
from docSVsys
join
(
select count(*) as [count]
from docSVenum1 as [sIt]
where [sIt].[sID] = [docSVsys].[sID]
) as [sI]
on '1' = '1'
order by [docSVsys].[sID]
트릭을 적용한 것으로 보입니다. 그리고 정확히 커서 버전보다 1/3 빠릅니다. 아래의 교차 적용을 사용하는 실제 검색어.
SELECT [sO].[sID], [sI].[max], [sI].[avg], [sI].[stdev]
FROM docSVsys as [sO] with (nolock)
cross apply
(
select [sO].[sID], max(list.match) as 'max', avg(list.match) as 'avg', stdev(list.match) as 'stdev'
from
(
select #SampleSet.[sID], [match] = 200 * count(*)/CAST (#SampleSetSummary.[count] + [sO].[textUniqueWordCount] as numeric(8,0))
from #SampleSet with (nolock)
join FTSindexWordOnce as [match] with (nolock) -- this is current @sID
on match.wordID = #SampleSet.wordID
and [match].[sID] = [sO].[sID]
join #SampleSetSummary with (nolock) -- to get the word count from the sample set
on #SampleSetSummary.[sID] = #SampleSet.[sID]
group by #SampleSet.[sID], #SampleSetSummary.[count]
) as list
having max(list.match) > 60
) as [sI]
where [textUniqueWordCount] is not null and [textUniqueWordCount] > 4 and [sO].[sID] <= 10686
order by [sO].[sID]
이것은 루프처럼 보일 것입니다. 권리? –
테스트 해 보겠습니다. 지금까지 그것은 좋아 보인다. – Paparazzi
예, 반복적 인 방식으로 구현되었지만 요청 된 사항이었습니다. 쿼리에 의한 그룹 조인보다 성능이 좋은지 여부는 테이블, 인덱스 등의 크기에 따라 다릅니다. 또 다른 옵션은 sID에 대한 인덱스를 가질 수 있도록 임시 테이블로 쿼리 그룹을 실행하는 것입니다. 다양한 옵션을 테스트하고 가장 잘 수행하는 옵션을 사용한다고 말하고 싶습니다. – GilM