in 순서대로 select
카테고리 없음 / 2016. 6. 9. 16:03
use tempdb
go
if object_id('tblx') is not null
drop table tblx
go
create table tblx
(idx int identity(1,1)
,c1 char(200))
go
insert into tblx default values
go 1000
declare @in1 int = 1
declare @in2 int = 3
declare @in3 int = 4
declare @in4 int = 2
select b.*
from (values (@in1), (@in2), (@in3), (@in4)) as a(invalue)
inner loop join tblx b
on b.idx = a.invalue
select *
from tblx
where idx in (@in1, @in2, @in3, @in4)
go
in query 의 경우 merge interval 등의 내부 처리를 거쳐 단 한개의 값으로 축소한다.
그런데, inner loop join 의 경우 같은 결과를 만들려면 외부에서 unique 함을 보장해 줘야하니 주의하길 바란다.
이렇게 명시적 order 하는게 가장 좋아 보임
select b.*
from (values (@in1, 1), (@in2, 2), (@in3, 3), (@in4, 4)) as a(invalue, inOrder)
join tblx b
on b.idx = a.invalue
order by inOrder