2013-04-12 47 views
1

我想寫一個SQL語句,將從一個表中拉出值,並從另一個表中取得相應的值。這工作正常,除非在聯接中使用的值之一爲空,那麼它什麼都不返回。我希望腳本在聯接爲空的情況下返回一個值(如'Nothing')。這可能嗎?我知道我可以在選擇中使用NVL,但加入怎麼辦?這是我的腳本:選擇與加入NVL

SELECT 
i.equip_pk, 
i.request_pk, 
MY_ALIAS.EQUIP_ALIAS_ID 
FROM 
tableOne i 
JOIN table2 MY_ALIAS ON (i.EQUIP_PK = MY_ALIAS.EQUIP_PK) 
WHERE i.request_pk=:requestPk 

我使用的是Oracle 10g,但此腳本不會用作PL/SQL。

感謝所有幫助

傑森

回答

2

可以使用LEFT JOIN。這將返回tableOne中的所有行,並且當它在第二個表中找不到匹配項時,它將返回null。然後你可以像你提到的那樣使用NVL

SELECT 
i.equip_pk, 
i.request_pk, 
NVL(MY_ALIAS.EQUIP_ALIAS_ID, 'Nothing here') 
FROM tableOne i 
LEFT OUTER JOIN table2 MY_ALIAS ON (i.EQUIP_PK = MY_ALIAS.EQUIP_PK) 
WHERE i.request_pk=:requestPk 

如果你從equip_pk期待空,你可以申請NVL到到。即使它爲空,LEFT JOIN仍然會產生正確的結果。

0
SELECT 
NVL(i.equip_pk, 'Nothing'), 
NVL(i.request_pk, 'Nothing)', 
MY_ALIAS.EQUIP_ALIAS_ID 
FROM 
tableOne i 
FULL JOIN table2 MY_ALIAS ON (i.EQUIP_PK = MY_ALIAS.EQUIP_PK) 
WHERE i.request_pk=:requestPk