一张桌子将有主要部分和子部分,再次主要部分将是另一个主要部分的子部分,它可能会一直持续到最后。
Main Part ------Sub Part
------------------------
A123 --------------B123
B123 --------------C123
C123 --------------D123
A123 --------------B123
X123 --------------Y123
Y123 --------------Z123
从上图中我把D123放在需要A123作为输出的情况下。
查询 - >
Select * from table where Sub Part = 'D123'
* 输出 - > * A123
同样地,当我把Z123放在需要X123的地方的情况下。
查询 - >
Select * from table where Sub Part = 'X123'
* 输出 - > * Z123
预期查询为答案 - >我需要一个查询,以便它将获取链中的最后一个主要部分
答案 0 :(得分:0)
您想要在长度未知的链中获得最后一个结果并不容易。 如果深度为6,如前所述,您可以尝试以下SQL语句:
SELECT COALESCE(t6.Main_Part,COALESCE(t5.Main_Part,COALESCE(t4.Main_Part,COALESCE(t3.Main_Part,COALESCE(t2.Main_Part,COALESCE(t1.Main_Part,'NO RESULT')))))) as RESULT
FROM table t1
LEFT JOIN table t2 ON t1.Main_Part=t2.Sub_Part
LEFT JOIN table t3 ON t2.Main_Part=t3.Sub_Part
LEFT JOIN table t4 ON t3.Main_Part=t4.Sub_Part
LEFT JOIN table t5 ON t4.Main_Part=t5.Sub_Part
LEFT JOIN table t6 ON t5.Main_Part=t6.Sub_Part
WHERE t1.Sub_Part='D123'
否则添加连接直到达到想要的最大深度