我有这个查询,只是更改了表和列的名称。
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出现。
答案 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标准。