我正在尝试使用 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),最后有一个付款栏填充。所以对于上面的情况,select 不应该显示什么如果 Table 看起来会怎样:
ACCOUNTID | PARENT | PAYMENT
------------------------------
5436 | 5436 | 1
4576 | 3457 | NULL
5763 | 5643 | 1
5686 | 5686 | NULL
3457 | 5686 | NULL
正如我们所看到的,唯一的变化是帐户 ID 旁边的 null 5686
,因此正确的选择应该显示帐户:4576, 3457, 5686