代码之家  ›  专栏  ›  技术社区  ›  holydragon

如何选择(填充?)SQL中从一个字段的值到另一个字段的值的记录?

  •  0
  • holydragon  · 技术社区  · 2 年前

    数据库:PostgreSQL

    我有这个起始查询和这个起始结果。

    select 
    plw.total_pages,
    plw.page_range,
    plw.from_page,
    plw.to_page
    from plw
    where plw.id = 6
    

    result

    我想从查询中获取数据(我不知道它是否可以称之为“填充”)。数据库中只有这一条记录,但我想得到总数 to_page - from_page =75-50=25条记录作为查询的结果。每个填充的记录都应该有另一个字段 page 跟踪它是哪一页。

    结果应该是这样的:

    总页数 页码范围 从第页 翻到第页
    100 符合事实的 50 75 50
    100 符合事实的 50 75 51
    100 符合事实的 50 75 52
    100 符合事实的 50 75 . . .
    100 符合事实的 50 75 73
    100 符合事实的 50 75 74
    100 符合事实的 50 75 75

    这样我就可以在页面范围内的一条记录中找到25条记录。

    有什么办法可以实现这一点吗?

    1 回复  |  直到 2 年前
        1
  •  1
  •   The Impaler    2 年前

    您没有提到具体的数据库,所以这里有两种解决方案:

    1. generate_series() 是生成一系列数字行的典型函数,如果可用的话,使用起来很简单。

       select p.*, n.curr
       from plw p
       cross join generate_series(
         (select from_page from plw where id = 6),
         (select to_page from plw where id = 6)
       ) n (curr)
       where p.id = 6
      
    2. 更通用的方法是使用递归CTE,它可以生成所需的行。例如:

       with
       n (curr, ls) as (
         select from_page, to_page from plw where id = 6
        union all
         select curr + 1, ls from n where n < ls
       )
       select p.*, n.curr
       from plw p
       cross join n
       where p.id = 6