Я пытаюсь написать запрос, используя предложение 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);
И теперь то, что я хочу сделать, это найти учетные записи, столбец оплаты которых не заполнен (даже родительская учетная запись). Каждая учетная запись может иметь родительскую учетную запись (родительский столбец), которая указывает на идентификатор другой учетной записи. Может быть, будет проще, если я представлю это на примере:
ACCOUNTID | PARENT | PAYMENT
-----------------------------
5436 | 5436 | 1
4576 | 3457 | NULL
5763 | 5643 | 1
5686 | 5686 | 1
3457 | 5686 | NULL
Первая учетная запись в порядке - колонка оплаты заполнена. Второй не в порядке, потому что он нулевой, но, как мы видим, есть родительская учетная запись, поэтому теперь мы проверяем (3457 учетная запись), и снова столбец оплаты равен нулю, но снова есть родительская учетная запись (5686) и, наконец, есть столбец оплаты заполненный. Таким образом, для описанных выше ситуаций select не должен ничего представлять. Что, если бы таблица выглядела так:
ACCOUNTID | PARENT | PAYMENT
------------------------------
5436 | 5436 | 1
4576 | 3457 | NULL
5763 | 5643 | 1
5686 | 5686 | NULL
3457 | 5686 | NULL
Как мы видим, единственное изменение равно null рядом с идентификатором учетной записи 5686
, поэтому правильный выбор должен отображать учетные записи: 4576, 3457, 5686