我正在做一个左外连接,只返回匹配的行,就像是一个内连接。
为了简化数据,我的第一个表(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
我只返回等于具有dept nos的行数的行数。所以在我上面的小数据示例中,我只能为ASN 85获得1行,但是我希望BYR_NO,BYR_NAME和DEPT_NAME的所有行都填充在我有DEPT_NO的行上,如果没有,则填充空/空列。
答案 0 :(得分:6)
如果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
答案 1 :(得分:4)
如果ORG_NO在RF_MERCHANGE_ORG中,则可能是原因...... where条件限制了结果集。