本帖最后由 KEN6503 于 2018-4-24 09:04 编辑
下面第一个query (红颜色) 是原来的query, 第二个是我改写的query, 我觉得这两个应该是等价的,但是结果不等,麻烦大师帮忙看看。我漏掉什么条件了我的理解是:蓝色query 是得到在表BGL中而不在表BMT中的记录;紫色的query是表BMT中符合条件BMT.FLAG >= '4' OR BMT.FLAG IS NULL记录与表BGL作inner join。 所以,合在一起就是:BGL 与BMT中符合条件BMT.FLAG >= '4' OR BMT.FLAG IS NULL的记录作left outer join。 但是,结果不对。写成紫红色的query, 结果是对的。
SELECTSUM (CNT), SUM (AMT)
FROM (SELECT COUNT (1) CNT, SUM (ABS (BGL.BGL_AMN)) AMT
FROMBMT,BGL
WHERE BGL.PT_NMBR = BMT.PT_NMBR(+)
AND BMT.PT_NMBR IS NULL
UNION ALL
SELECT COUNT (1) CNT, SUM (ABS (BGL.BGL_AMN))
FROMBMT,BGL
WHERE BGL.PT_NMBR = BMT.PT_NMBR
AND (BMT.FLAG >= '4' OR BMT.FLAG IS NULL));
SELECT COUNT (1) CNT, SUM (ABS (BGL.BGL_AMN))
FROM (SELECT *
FROMBMT
WHERE BMT.FLAG >= '4' OR BMT.BMT.FLAG IS NULL) BMT_O,
BGL
WHERE BGL.PT_NMBR = BMT_O.PT_NMBR(+);
SELECT COUNT (1) CNT, SUM (ABS (BGL.BGL_AMN))
FROM BMT, BGL
WHEREBGL.PT_NMBR = BMT_O.PT_NMBR(+)
AND ((BMT.FLAG >= '4'
OR BMT.BMT.FLAG IS NULL) OR BMT.PT_NMBR IS NULL);
|