选择带连接的NVL

时间:2013-04-12 15:11:35

标签: sql oracle

我正在尝试编写一个SQL语句,它将从一个表中提取值,从另一个表中提取相应的值。除非连接中使用的值之一为null,否则它将正常工作,然后它不返回任何内容。我希望脚本在join为null的情况下返回一个值(如'Nothing')。这可能吗?我知道我可以在选择中使用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 个答案:

答案 0 :(得分: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。即使它为空,{{1}}仍会产生正确的结果。

答案 1 :(得分: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