AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 197621
Accepted
broc.seib
broc.seib
Asked: 2018-02-12 07:56:33 +0800 CST2018-02-12 07:56:33 +0800 CST 2018-02-12 07:56:33 +0800 CST

如何将子表展平为父表

  • 772

我继承了一个db,需要将一个已有的父子关系转化为所有的parents。

让我先解释一下现有数据。这些表的结构类似于:

Thing                  Widget
------------           ------------
thing_id               widget_id
thing_name             widget_name
thing_rank             widget_rank
                       thing_id

数据以 s 列表的形式呈现给最终用户Things,偶尔也会以Thinghas-a 的形式呈现给最终用户Widget,并且小部件呈现为 的“下方”或“子” Thing。所以有一些等级制度。另一个关键是这个演示文稿是按thing_rank和排序的widget_rank。

这是一个具体的数据示例:

事物:

1001  "thing blue" 1
1002  "thing green" 3
1003  "thing red" 4
1004  "thing yellow" 2

小部件:

2001  "widget cucumber" 2  1002
2002  "widget bean" 1  1002

这将与Thing按等级排序的 s 一起呈现,然后两个孩子Widgets 属于“绿色事物”,并按等级排序:

1 thing blue
2 thing yellow
3 thing green
   1 widget bean
   2 widget cucumber
4 thing red

任务是删除层次结构,但保留等级顺序。例如,上述数据将被分配一个新的等级,所有数据将属于同一个关系——不再是父子关系。例如:

1 thing blue
2 thing yellow
3 thing green
4 widget bean
5 widget cucumber
6 thing red

单一关系是:

Stuff
-------------
stuff_id
stuff_type   (thing|widget)
stuff_name
stuff_rank

我正在寻找如何使用新的排名分配创建一个同时显示和数据的Stuff视图。ThingWidget

view rank
  • 1 1 个回答
  • 206 Views

1 个回答

  • Voted
  1. Best Answer
    McNets
    2018-02-12T08:53:58+08:002018-02-12T08:53:58+08:00

    由于您没有提供任何 RDBMS,我试图发布一个应该在多个系统中工作的答案。

    可以使用 row_number() 窗口函数按等级和编号对记录进行排序。

    select row_number() over (order by r1, r2) id, name
    from (
          select t.name as [name], t.[rank] r1, 0 as r2
          from   thing t
          union all
          select w.name as [name], t.[rank] r1, w.[rank] r2 
          from   widget w
          join   thing t
          on     t.id = w.thing_id
         ) x;
    GO
    
    编号 | 姓名           
    :- | :----------------
    1 | 蓝色的东西     
    2 | 黄色的东西   
    3 | 绿色的东西    
    4 | 小部件bean    
    5 | 小黄瓜
    6 | 红色的东西      
    

    dbfiddle在这里

    • 1

相关问题

  • 视图中的 ORDER BY 子句有哪些替代方案?

  • av$ view 和它的 dba_ 等价物有什么区别?

  • 从应用代码访问 all_mview 或 user_mviews

  • oracle中的物化视图

  • Oracle物化视图刷新计划

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve