Sybase 12.5입니다. 12.5부터는 top이 먹더군요. set rowcount 10 이렇게 안해도 되고 편하더라고요...ㅋㅋ
selet top 10
1,
2,
3
from aaa
union all
select top 10
1,
2,
3
from bbb
이렇게 하면 20건이 정상적으로 조회가 됩니다. 그런대
selet top 10
1,
2,
3
from aaa
union all
select top 10
1,
2,
3
from bbb
order by 1
이렇게 하면 10건만 조회가 되더라고요....
그래서
select
1,
2,
3
from(
selet top 10
1,
2,
3
from aaa
union all
select top 10
1,
2,
3
from bbb
)
order by 1
이렇게 해도 10건만 조회가 됩니다. 물론 order by 를 빼면 20건이 조회가 됩니다.
--> 제가 뽑고 싶은 결과는 aaa에서 order by 1의 숫자로 10건 bbb에서 order by 1의 숫자로 10건이 필요합니다.
생각해 보면 위의 쿼리도 맞는것은 아닙니다.
selet top 10
1,
2,
3
from aaa
order by 1
union all
select top 10
1,
2,
3
from bbb
order by 1
제가 원하는건 이거지만 이렇게 먹지를 안더라고요...^^;;
궁금한건
1. 왜 order by만 들어모녀 10건만 결과값이 나오는걸까요?? 옵티마이저가 내부적으로 어떻게 작동을 하길래 이렇게 나오는건가요??
대충 plan을 떠서 보니깐 order by일 경우는 worktable1을 쓰던대 정확한 해석은 잘 모르겠더라고요..^^;(실력이 아직 부족해서...ㅜ.ㅜ)
2. 제가 원하는건 aaa에서 sorting해서 상위 10개 bbb에서 sorting해서 상위 10개가 필요합니다. union all로는 불가능한가요?
꼭 임시테이블이나 다른곳으로 하나씩 빼서 해야 하는건지 궁금합니다.
그럼 고수님들의 고견 부탁드립니다.
|