【发布时间】:2016-02-15 14:28:45
【问题描述】:
我正在尝试使用 connect by 子句编写查询,但我无法处理。
一般我有桌子:
CREATE TABLE "TESTOWA" (
"ACCOUNT" VARCHAR2(20 BYTE),
"PARENT" VARCHAR2(20 BYTE),
"PAYMENT" VARCHAR2(20 BYTE)
);
Insert into TESTOWA (ACCOUNT,PARENT,PAYMENT) values ('5436','5436','1');
Insert into TESTOWA (ACCOUNT,PARENT,PAYMENT) values ('4576','3457',null);
Insert into TESTOWA (ACCOUNT,PARENT,PAYMENT) values ('5763','5686','1');
Insert into TESTOWA (ACCOUNT,PARENT,PAYMENT) values ('5686','5686',null);
Insert into TESTOWA (ACCOUNT,PARENT,PAYMENT) values ('3457','5686',null);
现在,我要做的是找到一个未填写付款栏的帐户(甚至是父帐户) 每个帐户都可以有指示其他帐户 ID 的父帐户(父列)。 如果我在示例中展示它可能会更容易:
ACCOUNTID | PARENT | PAYMENT
-----------------------------
5436 | 5436 | 1
4576 | 3457 | NULL
5763 | 5643 | 1
5686 | 5686 | 1
3457 | 5686 | NULL
第一个帐户没问题 - 付款栏已填满。 第二个不行,因为它是空的-但是我们可以看到有一个父帐户,所以现在我们检查 (3457 account) ,付款栏再次为空,但再次有一个父帐户 (5686),最后有一个付款栏填充。 所以对于上面的情况,选择不应该什么都没有 如果 Table 看起来会怎样:
ACCOUNTID | PARENT | PAYMENT
------------------------------
5436 | 5436 | 1
4576 | 3457 | NULL
5763 | 5643 | 1
5686 | 5686 | NULL
3457 | 5686 | NULL
我们可以看到,5686 帐户 ID 旁边唯一的变化是 null,因此正确的选择应该显示帐户:4576, 3457, 5686
【问题讨论】:
标签: sql oracle hierarchical-data connect-by