2017-03-15 41 views
0

我有這樣如何顯示的記錄,但顯示在結果中的值爲0,如果條件是不正確的SQL

SELECT 
    TA.MOBILE_NUMBER, 
    TA.AMOUNT, 
    TA.REFERENCEID, 
    TB.KEYCOST 
FROM TABLEA TA 
LEFT JOIN TABLEB TB ON TA.REFERENCEID = TB.REFERENCEID 
WHERE TA.STATUS = 0 
    AND TB.ALIAS = 'KEYCOST' 

一些referenceid's tableA查詢在tablebALIAS = 'KEYCOST'的條目,但一些referenceid's沒有按沒有任何與ALIAS = 'KEYCOST'的條目。

我想顯示所有referenceid'stableAKEYCOST他們有在TableB。如果TableA中的referenceid沒有任何KEYCOST,則結果應該具有該數據,但在KEYCOST列中顯示0。

如果有人可以幫我這裏,請。 謝謝

回答

2

將連接條件移動到ON語句,對於簡單的NVL應該幫助的NULL值,如果第一個值爲空,它將顯示第二個值。就像這樣:

SELECT TA.MOBILE_NUMBER, TA.AMOUNT, TA.REFERENCEID, NVL(TB.KEYCOST,0) KEYCOST FROM TABLEA TA 
LEFT JOIN TABLEB TB 
ON TA.REFERENCEID = TB.REFERENCEID AND TB.ALIAS = 'KEYCOST' 
WHERE TA.STATUS = 0 
+0

非常感謝你@Mikhail。 –

1

當使用LEFT JOIN,在表條件需要進入ON條款:

SELECT TA.MOBILE_NUMBER, TA.AMOUNT, TA.REFERENCEID, TB.KEYCOST 
FROM TABLEA TA LEFT JOIN 
    TABLEB TB 
    ON TA.REFERENCEID = TB.REFERENCEID AND TB.ALIAS = 'KEYCOST' 
WHERE TA.STATUS = 0; 

否則,由LEFT JOIN產生的NULL價值得到過濾掉。

如果您需要獲得0而不是NULL,那麼請使用COALESCE()。目前還不清楚你指的是哪一列。

+0

非常感謝您的快速回復。這是我期待的輸出:) –

0

如果你真的想與他們TableBKEYCOST顯示來自tableA所有referenceid's。如果TableA中的referenceid沒有任何KEYCOST,則結果應該具有該數據,但在KEYCOST列中顯示0

SELECT 
    TA.MOBILE_NUMBER, 
    TA.AMOUNT, 
    TA.REFERENCEID, 
    NVL(TB.KEYCOST, 0) KEYCOST 
FROM TABLEA TA 
LEFT JOIN TABLEB TB ON TA.REFERENCEID = TB.REFERENCEID 
    AND TB.ALIAS = TA.ALIAS 
WHERE TA.STATUS = 0 
    AND TA.ALIAS = 'KEYCOST' 

根據你的解釋,你要SELECT數據與ALIAS = KEYCOST,所以我們必須保持條件tableA也和joinALIAS列添加AND