私はこれはこれはWITH STARTとOracle SQLのCONNECT BY
select lpad(' ', 2*level) || A.ACCOUNT_ID AS LEVEL_LABEL,
LEVEL,
A.*
from ACCOUNT A
start with PARENT_ACCOUNT_ID IN
(select PARENT_ACCOUNT_ID
from ACCOUNT
where ACCOUNT_ID IN
(select PARENT_ACCOUNT_ID
from ACCOUNT
where parent_account_id != account_id)
and ACCOUNT_ID = PARENT_ACCOUNT_ID)
CONNECT BY NOCYCLE PRIOR A.ACCOUNT_ID = A.PARENT_ACCOUNT_ID;
私のクエリでDDL
CREATE TABLE "SYSTEM"."ACCOUNT"
("CUSTOMER_ID" NUMBER(20,0) NOT NULL ENABLE,
"PAYING_ACCOUNT_ID" NUMBER(20,0),
"PARENT_ACCOUNT_ID" NUMBER(20,0),
"ACCOUNT_ID" NUMBER,
"COMPANY_ID" NUMBER)
ある
CUSTOMER_ID PAYING_ACCOUNT_ID PARENT_ACCOUNT_ID ACCOUNT_ID COMPANY_ID
24669 24669 24669 24669 0
24671 24671 24669 24671 0
24670 24670 24669 24670 0
3385217 3385217 24670 3385217 0
158 158 158 158 0
159 159 158 159 0
160 160 159 160 0
161 161 160 161 0
162 162 160 162 0
180 180 180 180 0
以下のアカウントとしてテーブルを持っています
クエリの主な目的は、PARENT_ACCOUNT_ID & ACCOUNT_IDの階層関係を持つデータを選択することですが、クエリによって重複したデータが返されます。
アドバイスをいただければ幸いです。おかげ
parent_account_idとaccount_idはどのように異なっていて、同じ時間(ほとんどの内部クエリ)で等しいことができますか?これは正確に0の結果を生成する必要があるため、おそらくオリジナルのクエリではないため、重複はまったくありません。 – Benoit