如果将NVL与JOIN一起使用,则不返回默认值

时间:2018-07-26 20:36:07

标签: sql oracle oracle12c

我有这个查询,只是更改了表和列的名称。

SELECT COM.NAME,
COM.SURNAME,
NVL(COM.ACCOUNT, -1) AS ACCOUNT,
(SELECT NVL(BA.ACCOUNT_ID, '-1')
FROM TABLE2 BA
WHERE BA.ACCOUNT_ID = COM.ACCOUNT_ID) AS ACCOUNT_ID
FROM TABLE1 COM
WHERE COM.UNIQUE_DNI = 123123;

搜索将注册表显示为:

NAME  ACCOUNT  ACCOUNT_ID
qwe   -1

当BA.ACCOUNT_ID为null但没有成功时,我试图使-1出现。

1 个答案:

答案 0 :(得分:1)

我只使用一个明确的left join

SELECT COM.NAME, COM.SURNAME, COALESCE(COM.ACCOUNT, -1) AS ACCOUNT,
       COALESCE(BA.CCOUNT_DI, '-1') AS ACCOUNT_ID
FROM TABLE1 COM LEFT JOIN
     TABLE2 BA
     ON BA.ACCOUNT_ID = COM.ACCOUNT_ID
WHERE COM.UNIQUE_DNI = 123123;

不过,您的问题是NVL()在子查询内 。它需要应用于子查询的结果。我更喜欢COALESCE()胜过NVL(),仅仅是因为COALESCE()是ANSI / ISO标准。