如何在Firebird SQL Select结果集中添加指定数量的空行
在Firebird SQL查询结果前添加12个空行的正确做法
先分析你两次尝试的问题
第一次尝试错误原因:
你用UNION ALL关联SELECT null... FROM table,这条语句会返回与原表总记录数一致的空行——因为它是从原表逐行生成null结果,而不是生成固定行数的空行。第二次尝试错误原因:
改用UNION后,由于所有null行的内容完全重复,UNION会自动去重合并,最终只保留1行空行,无法达到添加12行的需求。
正确实现方式
要生成固定12行空行,需要基于单数据源生成多行,Firebird可以用递归CTE或者重复查询系统表RDB$DATABASE(该表固定只有1行)来实现:
方法1:递归CTE(推荐,可灵活调整行数)
WITH empty_rows(n) AS ( SELECT 1 FROM RDB$DATABASE UNION ALL SELECT n + 1 FROM empty_rows WHERE n < 12 ) SELECT null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null FROM empty_rows UNION ALL SELECT * FROM table WHERE id LIKE 'R%'
通过递归生成1到12的序列,再基于这个序列输出12行null值,最后用UNION ALL拼接目标查询结果。
方法2:重复查询系统表(简单直接)
-- 连续写12次SELECT null... FROM RDB$DATABASE SELECT null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null FROM RDB$DATABASE UNION ALL SELECT null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null FROM RDB$DATABASE UNION ALL SELECT null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null FROM RDB$DATABASE UNION ALL SELECT null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null FROM RDB$DATABASE UNION ALL SELECT null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null FROM RDB$DATABASE UNION ALL SELECT null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null FROM RDB$DATABASE UNION ALL SELECT null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null FROM RDB$DATABASE UNION ALL SELECT null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null FROM RDB$DATABASE UNION ALL SELECT null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null FROM RDB$DATABASE UNION ALL SELECT null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null FROM RDB$DATABASE UNION ALL SELECT null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null FROM RDB$DATABASE UNION ALL SELECT null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null FROM RDB$DATABASE -- 拼接目标查询 UNION ALL SELECT * FROM table WHERE id LIKE 'R%'
利用RDB$DATABASE仅1行的特性,每次查询生成1行空行,12次UNION ALL即可得到12行空行,再拼接目标结果。
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

