如何解决固定表分层查询的Union All的替代方法
下面的查询很耗时间,是否有没有全部并集的替代方法,我们可以在单个查询中实现吗
仅提供了3个表的样本数据,容易被低估了。
parameters:
- name: branchName
displayName: 'Repository branch name'
type: string
- name: WebAppName
displayName: 'Application name'
type: string
- name: ServiceConnection
displayName: 'ServiceConnection name'
type: string
- name: Workspace
displayName: 'Workspace name'
type: string
##[group]Beginning of a DeployTemplate Parameters
##[debug]Debug branchName: ${{parameters.branchName}}
##[debug]Debug WebAppName: ${{parameters.WebAppName}}
##[debug]Debug ServiceConnection: ${{parameters.ServiceConnection}}
##[debug]Debug Workspace: ${{parameters.Workspace}}
##[debug]Build.SourceBranchName: variables['Build.SourceBranchName']
##[endgroup]
--- GETTING FIRST LEVEL ---
select A,B,C,'PRODUCT' from PRODUCT PR
left outer join SPB B on B.PRODUCT_id=PR.id
left outer join SPC C on C.PRODUCT_id=PR.id AND C.SPB_ID IS NULL
left outer join SPD D on D.PRODUCT_id=PR.id AND D.SPB_ID IS NULL AND D.SPC_ID IS NULL
LEFT OUTER JOIN SPE E ON E.PRODUCT_ID=PR.id AND E.SPC_ID IS NULL AND E.SPD_ID IS NULL
UNION ALL
--- GETTING RECORDS OF ALL CHILDS WHOSE IMMEDIATE PARENT IS SPB ---
select A,'SPB' from SPB B
left outer join SPC C on C.SPB_id=B.id
left outer join SPD D on D.SPB_id = B.id and D.SPC_id is null
--NO SPD JOIN HERE AS THERE IS NO DIRECT AND RELATION SHIP---
UNION ALL
SELECT A,'SPC' FROM SPC C
left outer join SPD D on D.SPC_ID=C.id AND D.SPB_ID IS NULL
LEFT OUTER JOIN SPE E ON E.SPC_ID=C.id AND E.SPD_ID IS NULL
UNION ALL
SELECT A,'SPD' FROM SPD D
LEFT OUTER JOIN SPE E ON E.SPD_ID=D.id AND E.SPC_ID IS NULL
预期结果:
Table1(Product) Table2(SPB) Table3(SPC)
Product ProductName SPB P_ID SPC SP_B_ID P_ID
P101 Pname1 B201 P101 C301 P101
P102 Pname2 B202 P103 C302 B201 P101
P103 Pname3 B203 P103 C303 B202 P103
B204 P101 C304 B203 P103
C305 B202 P103
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。