我正在尝试编写一个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。
感谢您的帮助
杰森
答案 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