注册

多字段的innerjoin和leftjoin

zt 2026/02/05 180 1

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:
【操作系统】:
【CPU】:
【问题描述】*:同一个sql,用inner join连接两个表多个字段就非常慢,但是改成left join然后用条件过滤就是正常速度。

SELECT T1.BH FROM ( SELECT BH, COALESCE(T.DMMC, '-1') AS DMMC, COALESCE(T.DMJMC, '-1') AS DMJMC, COALESCE(T.DMZ, '-1') AS DMZ, COALESCE(T.BZLX, '-1') AS BZLX, COALESCE(T.SJDMBH, '-1') AS SJDMBH, COALESCE(T.MS, '-1') AS MS, COALESCE(T.SFQY, '-1') AS SFQY FROM A T WHERE DRRWBH = '2019329040070086656' ) T1 -- LEFT JOIN ( INNER JOIN ( SELECT COALESCE(A.DMMC, '-1') AS DMMC, COALESCE(B.DMJMC, '-1') AS DMJMC, COALESCE(A.DMZ, '-1') AS DMZ, COALESCE(A.BZLX, '-1') AS BZLX, COALESCE(C.DMZ, '-1') AS SJDMBH, COALESCE(A.MS, '-1') AS MS, COALESCE(A.SFQY, '-1') AS SFQY FROM B A LEFT JOIN C B ON A.DMJBH = B.DMJBH LEFT JOIN (SELECT DMXBH, DMZ FROM B WHERE YXJSSJ = TO_DATE('9999-12-31 23:59:59','YYYY-MM-DD HH24:MI:SS') AND BGBJ NOT IN ('D')) C ON C.DMXBH = A.SJDMBH WHERE A.YXJSSJ = TO_DATE('9999-12-31 23:59:59','YYYY-MM-DD HH24:MI:SS') AND A.BGBJ NOT IN ('D') AND B.SFSC = '0' AND B.YXJSSJ = TO_DATE('9999-12-31 23:59:59','YYYY-MM-DD HH24:MI:SS') ) T2 ON T1.DMJMC = T2.DMJMC AND T1.DMMC= T2.DMMC AND T1.DMZ=T2.DMZ AND T1.SFQY= T2.SFQY AND T1.MS= T2.MS AND T1.SJDMBH= T2.SJDMBH AND T1.BZLX= T2.BZLX -- WHERE T2.DMMC IS NOT NULL
回答 0
暂无回答
扫一扫
联系客服