关于oracel 递归语法start with connect by 和 left join 一起使用的一个bug
左表为树状结构机构表A,右表为人员表(有机构ID字段)B
SELECT A.*, B.* FROM A LEFT JOIN B ON A.ORG_ID = B.ORG_ID START WITH A.ORG_ID = '011000000004' CONNECT BY PRIOR A.ORG_ID = A.P_ORG_ID
查询结果出现,B表中的1条记录,最后重复出现。(最终的结果可能为:对 A 和 B 连接后的临时表,进行递归查询)因为B表中某一个机构ID的记录有多条,导致连接后,该ID的记录有多条,进行了多次递归,导致重复出现?
解决方法,先用with as 临时表对A,先做递归,然后再左连接B
WITH TMP_ORG AS (SELECT * FROM A START WITH A.ORG_ID = '011000000004' CONNECT BY PRIOR A.ORG_ID = A.P_ORG_ID) SELECT T.*, B.* FROM TMP_ORG T LEFT JOIN B ON T.ORG_ID = B.ORG_ID