- 论坛徽章:
- 0
|
虽然这个帖子已经很久了,但是小弟现在遇到个关于sybase临时表分页的问题,对于两个结果集union 后分页不正确。
例如:
SELECT row_num=identity(16),tmpData.* into #tmptalbe from
(
SELECT ACCOUNT_ID ,CARD_ID FROM T_ACCOUNT_CARD
UNION ALL
SELECT USER_ID,ROLE_ID FROM T_USER_ROLE
) tmpData
select * from #tmptalbe
--where row_num>=convert(int,1) and row_num<=convert(int,20)
drop table #tmptalbe
这样分页后不正确,因为union all 后面第二个结果集没有被分配row_num,始终是0,导致我分页不正确。
我尝试改写union all写法, 用full join 来实现,但是测试时才发现sybase居然不支持full join,郁闷到了。。
SELECT
CASE WHEN A.ACCOUNT_ID IS NULL THEN B.USER_ID ELSE A.ACCOUNT_ID END ID1,
CASE WHEN A.CARD_ID IS NULL THEN B.ROLE_ID ELSE A.CARD_ID END ID2
FROM T_ACCOUNT_CARD A FULL JOIN T_USER_ROLE B ON 1=2
另外我也测试了用视图来做,结果也不行,视图中用UNION ALL 连接的两个结果集,第二个结果集还是没有ROW_NUM,始终为0,导致sybase临时表分页也不正确。
CREATE VIEW V_TEST AS(
SELECT ACCOUNT_ID ,CARD_ID FROM T_ACCOUNT_CARD
UNION ALL
SELECT USER_ID,ROLE_ID FROM T_USER_ROLE
)
SELECT row_num=identity(16),tmpData.* into #tmptalbe from
(
SELECT * FROM V_TEST
) tmpData
select * from #tmptalbe
--where row_num>=convert(int,1) and row_num<=convert(int,20)
drop table #tmptalbe
请问怎么来结果这个分页查询不正确,到底union all 后的第二个结果集为什么row_num始终是0,而不是递增的顺序值呢? |
|