sql查询解释

sql查询解释,sql,oracle,left-join,Sql,Oracle,Left Join,以下是用于从源表STG01\u帐户\u EBS\u SRC\u DUP到目标表STG02\u帐户\u F\u DUP选择数据的查询。当执行这些关节时,我在可视化数据方面面临困难 -我的理解是从P1到P10创建了10个表实例,从G1到G11创建了11个列别名 insert into STG02_ACCOUNT_F_DUP select distinct '10' HIER_ID, 'EXPIT' HIER_NAME, P1.PARENT_FLEX_VALUE G1, P1.FLEX_VALUE

以下是用于从源表
STG01\u帐户\u EBS\u SRC\u DUP
到目标表
STG02\u帐户\u F\u DUP
选择数据的查询。当执行这些关节时,我在可视化数据方面面临困难

-我的理解是从
P1
P10
创建了10个表实例,从
G1
G11
创建了11个列别名

insert into STG02_ACCOUNT_F_DUP 
select distinct '10' HIER_ID, 'EXPIT' HIER_NAME, P1.PARENT_FLEX_VALUE G1, 
P1.FLEX_VALUE G2, P1.SUMMARY_FLAG_ORG, P1.SUMMARY_FLAG_CLS, P1.RANGE_ATTRIBUTE, P1.ENABLED_FLAG, 
P2.FLEX_VALUE G3, P2.SUMMARY_FLAG_ORG, P2.SUMMARY_FLAG_CLS, P2.RANGE_ATTRIBUTE, P2.ENABLED_FLAG, 
P3.FLEX_VALUE G4, P3.SUMMARY_FLAG_ORG, P3.SUMMARY_FLAG_CLS, P3.RANGE_ATTRIBUTE, P3.ENABLED_FLAG, 
P4.FLEX_VALUE G5, P4.SUMMARY_FLAG_ORG, P4.SUMMARY_FLAG_CLS, P4.RANGE_ATTRIBUTE, P4.ENABLED_FLAG, 
P5.FLEX_VALUE G6, P5.SUMMARY_FLAG_ORG, P5.SUMMARY_FLAG_CLS, P5.RANGE_ATTRIBUTE, P5.ENABLED_FLAG, 
P6.FLEX_VALUE G7, P6.SUMMARY_FLAG_ORG, P6.SUMMARY_FLAG_CLS, P6.RANGE_ATTRIBUTE, P6.ENABLED_FLAG, 
P7.FLEX_VALUE G8, P7.SUMMARY_FLAG_ORG, P7.SUMMARY_FLAG_CLS, P7.RANGE_ATTRIBUTE, P7.ENABLED_FLAG, 
P8.FLEX_VALUE G8, P8.SUMMARY_FLAG_ORG, P8.SUMMARY_FLAG_CLS, P8.RANGE_ATTRIBUTE, P8.ENABLED_FLAG, 
P9.FLEX_VALUE G10, P9.SUMMARY_FLAG_ORG, P9.SUMMARY_FLAG_CLS, P9.RANGE_ATTRIBUTE, P9.ENABLED_FLAG, 
P10.FLEX_VALUE G11, P10.SUMMARY_FLAG_ORG, P10.SUMMARY_FLAG_CLS, P10.RANGE_ATTRIBUTE, P10.ENABLED_FLAG, 
SYSDATE
from STG01_ACCOUNT_EBS_SRC_DUP P1, STG01_ACCOUNT_EBS_SRC_DUP P2, 
STG01_ACCOUNT_EBS_SRC_DUP P3, STG01_ACCOUNT_EBS_SRC_DUP P4, 
STG01_ACCOUNT_EBS_SRC_DUP P5, STG01_ACCOUNT_EBS_SRC_DUP P6, 
STG01_ACCOUNT_EBS_SRC_DUP P7, STG01_ACCOUNT_EBS_SRC_DUP P8, 
STG01_ACCOUNT_EBS_SRC_DUP P9, STG01_ACCOUNT_EBS_SRC_DUP P10
where P1.FLEX_VALUE = P2.PARENT_FLEX_VALUE (+)
and P2.FLEX_VALUE = P3.PARENT_FLEX_VALUE (+)
and P3.FLEX_VALUE = P4.PARENT_FLEX_VALUE (+)
and P4.FLEX_VALUE = P5.PARENT_FLEX_VALUE (+)
and P5.FLEX_VALUE = P6.PARENT_FLEX_VALUE (+)
and P6.FLEX_VALUE = P7.PARENT_FLEX_VALUE (+)
and P7.FLEX_VALUE = P8.PARENT_FLEX_VALUE (+)
and P8.FLEX_VALUE = P9.PARENT_FLEX_VALUE (+)
and P9.FLEX_VALUE = P10.PARENT_FLEX_VALUE (+)
and P1.PARENT_FLEX_VALUE = '80000'
order by P1.PARENT_FLEX_VALUE, P1.FLEX_VALUE, P2.FLEX_VALUE, P3.FLEX_VALUE, P4.FLEX_VALUE, 
P5.FLEX_VALUE, P6.FLEX_VALUE, P7.FLEX_VALUE, P8.FLEX_VALUE,
P9.FLEX_VALUE, P10.FLEX_VALUE;
你能用L
EFT-JOIN
解释一下这个街区发生了什么吗

 where P1.FLEX_VALUE = P2.PARENT_FLEX_VALUE (+)
    and P2.FLEX_VALUE = P3.PARENT_FLEX_VALUE (+)
    and P3.FLEX_VALUE = P4.PARENT_FLEX_VALUE (+)
    and P4.FLEX_VALUE = P5.PARENT_FLEX_VALUE (+)
    and P5.FLEX_VALUE = P6.PARENT_FLEX_VALUE (+)
    and P6.FLEX_VALUE = P7.PARENT_FLEX_VALUE (+)
    and P7.FLEX_VALUE = P8.PARENT_FLEX_VALUE (+)
    and P8.FLEX_VALUE = P9.PARENT_FLEX_VALUE (+)
    and P9.FLEX_VALUE = P10.PARENT_FLEX_VALUE (+)
    and P1.PARENT_FLEX_VALUE = '80000'

谢谢

你知道什么是左连接吗

其中P1.FLEX\u值=P2.PARENT\u FLEX\u值(+)

意味着:无论P2中是否存在匹配记录,始终从P1返回一条记录,如果P2中没有匹配记录,则返回null。看这里:如果这不能回答你的问题,你需要进一步解释

换言之,这是在一棵树上工作,如果树中没有父级,仍然包括记录


如果您要删除
(+)
,那么您的查询可能会返回非常小的lt

每个STG01\u帐户\u EBS\u SRC\u DUP都可以通过其子父项\u FLEX\u值中的FLEX\u值匹配字段链接到其子STG01\u帐户\u EBS\u SRC\u DUP。因此,只要阅读它,你就可以从:P1.PARENT\u FLEX\u VALUE='80000'开始,80000'是'80000'的儿子,然后你就可以得到这一个的所有儿子。你要的是?这是旧的oracle外部联接语法,甚至oracle建议停止使用过时的
(+)
运算符进行外部联接。您应该使用
左连接
而不是前端注意:1/。删除
(+)
2/。检查是否可以有比10更深的层次结构,或者10是mandotory 3/。用CTE for cleanner代码翻译这个递归。这让我现在理解得更好了。