2

我正在尝试编写一个 SQL 语句,该语句将从一个表中提取值并从另一个表中提取相应的值。这工作正常,除非连接中使用的值之一为空,然后它不返回任何内容。如果连接为空,我希望脚本返回一个值(如“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。

谢谢你的帮助

杰森

4

2 回答 2

3

您可以使用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仍然会产生正确的结果。

于 2013-04-12T15:14:31.297 回答
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 
于 2013-04-12T15:15:04.493 回答