【问题标题】:Find Rows with no leaf - Oracle查找没有叶子的行 - Oracle
【发布时间】:2021-08-30 15:00:38
【问题描述】:

我在表格中有以下格式的数据。

NAME PATH
A ABC
A ABC:A
C XYZ:C
E XYZ:C:D
F XYZ:C:D

我正在尝试仅获取叶节点记录的输出,所以基本上我希望获得类似的输出

NAME PATH
A ABC:A
E XYZ:C:D
F XYZ:C:D

我尝试在 PATH 列上做嵌套子字符串,但它给了我所有行。

我的足迹:--

select * from TEST
   where 
      PATH NOT IN 
       ( select DISTINCT(substr(PATH, instr(PATH, ':', 1) + 1))from TEST)

substr 未采用完整路径,无法找到最后的父路径。

问候。

【问题讨论】:

  • Edit 问题并显示您已经尝试过的内容。解释失败的原因/位置。具体(错误消息、意外结果等)。
  • 添加了我的查询并且没有错误。只是输出不如预期。

标签: oracle plsql substring


【解决方案1】:

由于您有路径,您可以使用NOT EXISTS 和使用LIKE 的相关子查询。

SELECT *
       FROM test t1
       WHERE NOT EXISTS (SELECT *
                                FROM test t2
                                WHERE t2.path <> t1.path
                                      AND t2.path LIKE t1.path || ':%');

db<>fiddle

【讨论】:

  • 谢谢 .. 这真的很有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-02-16
  • 2021-03-08
  • 2011-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-24
相关资源
最近更新 更多