使用DB2数据库:
select *
from (SELECT table1.field1, ROW_NUMBER() OVER (ORDER BY table1.field1) AS RID FROM table1
UNION
SELECT table2.field1
FROM table2, ROW_NUMBER() OVER (ORDER BY table2.field1) AS RID order by field1) as t where t.rid <= 20
以上查询返回40条记录,只需要获取20条记录。此查询只是尝试从每个查询中获取20条记录,这些记录总共有40条记录。可能存在查询1将返回0条记录但查询2可以返回20条行的情况。建议是否有人遇到过类似的问题和解决方案?
答案 0 :(得分:0)
只需将FETCH FIRST
与嵌套CTE结合使用即可。这将最多获取每个表的20个,优先考虑表1中的行,总共20个:
SELECT b FROM
(
SELECT * FROM
(SELECT 1,table1.field1 FROM table1 ORDER BY 2 FETCH FIRST 20 ROWS ONLY) t1
UNION
SELECT * FROM
(SELECT 2,table2.field1 FROM table2 ORDER BY 2 FETCH FIRST 20 ROWS ONLY) t2
) tt(a,b)
ORDER BY 1,2
FETCH FIRST 20 ROWS ONLY
如果你的表中没有太多行,你可以简单地消除内部CTE + FETCH FIRST,让外部SORT + FETCH FIRST完成所有工作。