sql - 查询单行中一个元素的父条目和子条目

标签 sql oracle where-clause

我正在寻找在一行中显示父条目和子条目的最佳方法。 示例:

Table A
 ID   |  PARENT_ID   |  VALUE
=============================
 1    |              | A
 2    |      1       | B
 3    |      2       | C
 4    |              | D
 5    |      4       | E

所以我想得到以下结果:

 ID   |  PARENT      | CHILD     |  VALUE
 =========================================
 2    |    1         |   3       |  A
 5    |    4         |           |  E

你会如何解决这个问题?

非常感谢任何帮助。

丹尼尔

最佳答案

您可以通过自连接轻松完成:

SQL> WITH table_a AS (
  2   SELECT 1 ID, NULL parent_id, 'A' VALUE FROM dual
  3   UNION ALL SELECT 2, 1, 'B' FROM dual
  4   UNION ALL SELECT 3, 2, 'C' FROM dual
  5   UNION ALL SELECT 4, NULL, 'D' FROM dual
  6   UNION ALL SELECT 5, 4, 'E' FROM dual
  7  )
  8  SELECT children.id, children.parent_id,
  9         grand_children.id, children.value
 10    FROM (SELECT ID, parent_id, VALUE
 11             FROM table_a
 12            WHERE LEVEL = 2
 13           CONNECT BY parent_id = PRIOR ID
 14            START WITH parent_id IS NULL) children
 15    LEFT JOIN table_a grand_children
 16           ON children.id = grand_children.parent_id;

        ID  PARENT_ID         ID VALUE
---------- ---------- ---------- -----
         2          1          3 B
         5          4            E

关于sql - 查询单行中一个元素的父条目和子条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2190347/

相关文章:

oracle 限制为 1000/hibernate

mysql - 如何使用给定的正则表达式格式检查 sql 查询中用户输入的格式?

sql - oracle 在多线程环境中选择和更新或选择和插入

Oracle PLSQL 依赖链(无效对象)

oracle - 无法从 Sqoop 调用 Oracle 存储过程

mysql - 嵌套0​​x104567910查询

mysql - 带有 GROUP_CONCAT 的动态 IN+IF 子句?

sql - 如何使 SQL 返回 bool 值 true/false(非字符串)而不是 1/0

sql - 选择行直到满足条件

mySQL 查询没有返回正确的结果!