如何根据条件从我的表中选择不同的列?

伊姆维克兰特

我想根据列的值从 Oracle DB 中检索记录。我怎么做..?

我需要根据同一个表中的“是子项目”列值来选择项目 ID。我想获取所有可能的最高级别项目的项目 ID:如果当前记录是子项,则为父项 ID,如果当前记录没有父项,则应返回自身 ID。

我正在使用 Oracle SQL Developer 18.2。

| Project ID | Is Child Project | Parent Project ID |
+------------+------------------+-------------------+
|        101 | Yes              | 501               |
|        102 | No               | -                 |
|        201 | No               | -                 |
|        202 | Yes              | 502               |
|        501 | No               | -                 |
|        502 | No               | -                 |
+------------+------------------+-------------------+

I expect to get relevant Project ID i.e. if Project is Child then I should get 'Parent Project ID' else just 'Project ID', meaning that
梦境

包含主键 id 列以及作为表自身主键的外键的另一列的表称为邻接表。

在您引用的示例中,没有必要使用“is_child_project”列,因为该信息是多余的。父列中值的存在是对行是否是层次结构的顶级问题的逻辑答案。

Oracle 有一些专有的 SQL 结构来帮助针对邻接列表编写有用的查询。我在您提供的行中添加了更多行,并更新了 501 和 502 的父项目以显示层次结构的更多深度。

COLUMN p_id_hierarchy FORMAT a14
COLUMN parent_project_id FORMAT a17
COLUMN top_level_project FORMAT a17

WITH ald( project_id, parent_project_id ) AS (--adjacency list data
    SELECT '101', '501' FROM DUAL UNION ALL
    SELECT '102',  NULL FROM DUAL UNION ALL
    SELECT '201',  NULL FROM DUAL UNION ALL
    SELECT '202', '502' FROM DUAL UNION ALL
    SELECT '501', '003' FROM DUAL UNION ALL
    SELECT '502', '002' FROM DUAL UNION ALL
    SELECT '003', '001' FROM DUAL UNION ALL
    SELECT '002', '001' FROM DUAL UNION ALL
    SELECT '001',  NULL FROM DUAL
    )

    SELECT LPAD(project_id, LENGTH(project_id) + LEVEL - 1, ' ') AS p_id_hierarchy,
           parent_project_id,
           CONNECT_BY_ROOT project_id AS top_level_project
      FROM ald
CONNECT BY parent_project_id = PRIOR project_id
START WITH parent_project_id IS NULL
;

从您所写的内容来看,您的要求似乎是了解邻接列表中任何层次结构的顶级(根)。CONNECT_BY_ROOT 运算符将为您提供此信息。

P_ID_HIERARCHY PARENT_PROJECT_ID TOP_LEVEL_PROJECT
-------------- ----------------- -----------------
001                              001              
 002           001               001              
  502          002               001              
   202         502               001              
 003           001               001              
  501          003               001              
   101         501               001              
102                              102              
201                              201              

9 rows selected. 

需要明确的是,CONNECT BY、STARTS WITH 和 CONNECT_BY_ROOT 操作是特定于 Oracle 的。如果您想研究一种更与 RDBMS 无关的方法,您将需要研究主题“递归公用表表达式”。这是一种执行分层查询的符合 SQL-ANSI 的方法——并且在 Oracle 中也可用。

分层查询不是一个简单的学习主题。我花了相当长的时间练习它们来建立扎实的理解。祝你好运。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我需要根据跨多个表的条件从数据库中选择信息

来自分类Dev

从同一表,不同行,不同列中选择

来自分类Dev

从2个条件不同的表中选择

来自分类Dev

如何从不同表中选择以XXXX开头的每一列和最后添加的列?

来自分类Dev

从同一表中选择条件不同的字段

来自分类Dev

根据列从表中选择行

来自分类Dev

从相同的表中选择相同的数据,只是条件与不同的列相同

来自分类Dev

根据约束条件从不同目录的表中选择过滤后的行,以转换为Excel文件

来自分类Dev

根据条件从其他2列中选择不同的一列(如何将它们配对?)

来自分类Dev

如何根据一组列在不同行的小标题列中选择信息?

来自分类Dev

如何根据不同条件从其他表中选择字段

来自分类Dev

从2个不同的表中选择2个不同的列

来自分类Dev

如何根据不同的时间范围从多个表中选择数据?

来自分类Dev

我想通过SQL根据另一个列从两个表中选择两个不同的列

来自分类Dev

如何根据我们在共享菜单中选择的应用程序发送不同的文件?

来自分类Dev

如何有条件地从不同表的两列中选择

来自分类Dev

如何从SQL表的各个列中选择不同的记录

来自分类Dev

Mysql在不同的表中选择两列

来自分类Dev

根据用户在Django模板中选择不同的样式表

来自分类Dev

MySQL:如何从表中选择不同的值?

来自分类Dev

根据另一列中的数据有条件地从不同列中选择数据

来自分类Dev

根据条件从表中选择不同的值

来自分类Dev

根据列条件从熊猫数据框中选择列

来自分类Dev

根据常用列从多个表中选择不同的列

来自分类Dev

如何从表中选择不同的值?

来自分类Dev

如何从我的表 Postgres 中选择 json

来自分类Dev

根据条件从不同的表中选择

来自分类Dev

如何从数据库中选择具有相同查询但条件不同的表中的数据?

来自分类Dev

使用R,如何根据要选择的列名称的一列从不同列中选择值?

Related 相关文章

  1. 1

    我需要根据跨多个表的条件从数据库中选择信息

  2. 2

    从同一表,不同行,不同列中选择

  3. 3

    从2个条件不同的表中选择

  4. 4

    如何从不同表中选择以XXXX开头的每一列和最后添加的列?

  5. 5

    从同一表中选择条件不同的字段

  6. 6

    根据列从表中选择行

  7. 7

    从相同的表中选择相同的数据,只是条件与不同的列相同

  8. 8

    根据约束条件从不同目录的表中选择过滤后的行,以转换为Excel文件

  9. 9

    根据条件从其他2列中选择不同的一列(如何将它们配对?)

  10. 10

    如何根据一组列在不同行的小标题列中选择信息?

  11. 11

    如何根据不同条件从其他表中选择字段

  12. 12

    从2个不同的表中选择2个不同的列

  13. 13

    如何根据不同的时间范围从多个表中选择数据?

  14. 14

    我想通过SQL根据另一个列从两个表中选择两个不同的列

  15. 15

    如何根据我们在共享菜单中选择的应用程序发送不同的文件?

  16. 16

    如何有条件地从不同表的两列中选择

  17. 17

    如何从SQL表的各个列中选择不同的记录

  18. 18

    Mysql在不同的表中选择两列

  19. 19

    根据用户在Django模板中选择不同的样式表

  20. 20

    MySQL:如何从表中选择不同的值?

  21. 21

    根据另一列中的数据有条件地从不同列中选择数据

  22. 22

    根据条件从表中选择不同的值

  23. 23

    根据列条件从熊猫数据框中选择列

  24. 24

    根据常用列从多个表中选择不同的列

  25. 25

    如何从表中选择不同的值?

  26. 26

    如何从我的表 Postgres 中选择 json

  27. 27

    根据条件从不同的表中选择

  28. 28

    如何从数据库中选择具有相同查询但条件不同的表中的数据?

  29. 29

    使用R,如何根据要选择的列名称的一列从不同列中选择值?

热门标签

归档