Oracle,LEFT OUTER JOIN不返回左表中的所有行,而是表现为INNER JOIN

SomeRandomDeveloper

我正在做一个左外部联接,并且只返回匹配的行,就像它是一个内部联接一样。

为了简化数据,我的第一个表(ROW_SEG)或左表看起来像这样:

ASN | DEPT NO
-----------------------
85  | 836
86  | null         
87  | null  

我的第二张表(RF_MERCHANT_ORG)有DEPT_NAME,还有其他一些我想拥有部门号时想要得到的东西。

DEPT NO | DEPT_NAME
-----------------------
836     | some dept name 1
837     | some dept name 2
838     | some dept name 3

在这种情况下,我加入联盟后,我只会得到1行,因为ASN 85的DEPT是NO。

...omitting a bunch of SQL for simplicity

, ROW_SEG AS (
    SELECT *
    FROM VE_SI_EC_OI
    WHERE ROW_NUM BETWEEN 1 AND 1000 -- screen pagination, hardcoding values
)

-- ROW_SEG has a count of 1000 now

, RFS_JOIN AS (
    SELECT ROW_SEG.*
    ,MO.BYR_NO
    ,MO.BYR_NAME
    ,MO.DEPT_NAME
    FROM ROW_SEG
    LEFT OUTER JOIN RF_MERCHANT_ORG MO
    ON ROW_SEG.DEPT_NO = MO.DEPT_NO    
    WHERE MO.ORG_NO = 100  
)
SELECT * FROM RFS_JOIN; -- returns less than 1000

我只返回等于部门编号的行数。因此,在上面的小数据示例中,对于ASN 85,我只会获得1行,但我希望在具有DEPT_NO的行中填充所有BYR_NO,BYR_NAME和DEPT_NAME的行,如果没有,则为空/空列。

安德鲁

如果ORG_NO在RF_MERCHANT_ORG表内(始终使用别名将对此有所帮助),则使用内部联接的行为将是所使用SQL的正确结果。

联接应该是这样,以使其表现为适当的左联接:

LEFT OUTER JOIN RF_MERCHANT_ORG MO ON ROW_SEG.DEPT_NO = MO.DEPT_NO AND MO.ORG_NO = 100

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章