Postgresql select 5行即使有3行数据

Postgresql select 5 rows even if there is 3 row of data

如何 Select 5 行,即使有 3 行数据,接下来的 2 行应该是空行。

您需要一个包含 5 个数字的 table,然后您为 table 分配一个行号并执行左连接。

cte是数据,最后是查询需要的:

SQL DEMO

WITH all5 as (
    SELECT *
    FROM (VALUES(1), (2), (3), (4), (5)) AS t (ID)
), some2 as (
    SELECT *
    FROM (VALUES('first'), ('second')) AS t (value)
)
SELECT * 
FROM all5
LEFT JOIN (SELECT row_number() OVER (ORDER BY value) as rn, *
           FROM some2) as t
  ON all5.ID = t.rn          

输出

您可以将结果与 空行 合并,它应该具有与 table 相同类型的列。示例:

with my_table(id, str, a_date) as (
values
    (1, 'first', '2017-09-01'::date),
    (2, 'second', '2017-09-02'),
    (3, 'third', '2017-09-03')
)

select *
from my_table

union all

select null::int, null::text, null::date
from generate_series(1, 5) -- generate 5 empty rows

order by id nulls last
limit 5

 id |  str   |   a_date   
----+--------+------------
  1 | first  | 2017-09-01
  2 | second | 2017-09-02
  3 | third  | 2017-09-03
    |        | 
    |        | 
(5 rows)