我有一个表(oracle数据库,如果它很重要),看起来像这样:
NAME VALUE
parent.1 aa1234
parent.2 bb1234
child.3H hh1234
child.2B bb1234
child.6P oo6666
parent.3 hh1234
child.1A aa1234
child.5K ee9999
child.2C bb1234
child.1A aa1234
child.3G hh1234
表中包含的父项和子项的顺序相当随机。它们通过VALUE
列相互引用。父级与其子级具有相同的字符串值。父母通常有一个或多个孩子,所以父母和它的孩子将具有完全相同的值。
这只是一个例子,但是用子字符串like '%parent%'
或like '%child%'
来区分父级和子级是有效的。NAME
和VALUE
列都是NVARCHARS2(255)
。
我正在尝试查找孤儿-没有父代的子代(在示例中为child.6p
和child.5K
)。在一个查询或脚本中是可能的吗?
发布于 2020-04-07 07:46:42
您可以按如下方式使用not exists
:
SELECT T.NAME, T.VALUE
FROM YOUR_TABLE T
WHERE T.NAME LIKE '%child%'
AND NOT EXISTS (SELECT 1
FROM YOUR_TABLE T1
WHERE T1.NAME LIKE '%parent%'
AND T.VALUE = T1.VALUE);
发布于 2020-04-07 07:48:48
select * from tab C
where NAME LIKE ('child%')
AND NOT EXISTS
( SELECT 1 FROM TAB P WHERE
P.NAME LIKE ('parent%')
AND C.VAL = P.VAL
)
https://stackoverflow.com/questions/61074978
复制相似问题