我正在尝试编写一条SQL语句,该语句将从一个表中提取值,并从另一个表中提取相应的值。除非join中使用的值之一为null,否则它不会返回任何内容。我希望脚本在连接为空的情况下返回一个值(如'Nothing')。这个是可能的吗?我知道我可以在select中使用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。
谢谢你的帮助
杰森
发布于 2013-04-12 23:14:31
您可以使用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应用于。即使它是null,LEFT JOIN仍然会产生正确的结果。
发布于 2013-04-12 23:15:04
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 https://stackoverflow.com/questions/15974935
复制相似问题