使用 UNION 限制组合查询中的行数
Limiting the number of rows in the combined query using UNION
使用 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
以上查询returns 40条记录,只需要取20条记录。此查询只是尝试从每个查询中获取 20 条记录,这使得总共 40 records.There 可能是查询 1 将 return 0 条记录但查询 2 可以 return 20 行的情况。建议是否有人遇到过类似的问题和解决方案(如果有)?
只需将 FETCH FIRST
与嵌套 CTE 结合使用。这将获取每个 table 中的最多 20 个,优先考虑来自 table 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
如果您的 table 不包含太多行,您可以简单地消除内部 CTE + FETCH FIRST,让外部 SORT + FETCH FIRST 完成所有工作。
使用 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
以上查询returns 40条记录,只需要取20条记录。此查询只是尝试从每个查询中获取 20 条记录,这使得总共 40 records.There 可能是查询 1 将 return 0 条记录但查询 2 可以 return 20 行的情况。建议是否有人遇到过类似的问题和解决方案(如果有)?
只需将 FETCH FIRST
与嵌套 CTE 结合使用。这将获取每个 table 中的最多 20 个,优先考虑来自 table 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
如果您的 table 不包含太多行,您可以简单地消除内部 CTE + FETCH FIRST,让外部 SORT + FETCH FIRST 完成所有工作。