我在我的两张桌子上使用了左连接。现在我想用case来识别左表中没有匹配的记录。这样的记录存在并且在我的连接的'id_zeus'列中具有空值,但是当我执行该情况时,这些字段不存在。我哪里错了?我在我的所有专栏“干扰”中得到“现在”。我正在使用Oracle SQL开发人员。
SELECT
CASE DP.ID_PRB
WHEN NULL
THEN 'Absence'
ELSE 'Present' END as Disturbance,
FROM
FIRE.WSITE WI
LEFT JOIN
(SELECT DISTINCT
DPL.ID_PERT as ID_PRB
FROM FIRE.DEPPLAN DPL
GROUP BY DPL.ID_PERT
) DPL
ON WI.ID_PERT = DP.ID_PERT
答案 0 :(得分:1)
什么是SELECT DISTINCT
?你好像不需要它。 GROUP BY
和NULL
是多余的,因此只使用其中一个。并且子查询上的别名不正确。
但您的问题是与CASE
的比较。当你在IS NULL
进行比较时,它甚至不匹配。您需要使用SELECT (CASE WHEN DP.ID_PRB IS NULL THEN 'Absence' ELSE 'Present'
END) as Disturbance,
FROM FIRE.WSITE WI LEFT JOIN
(SELECT DISTINCT DPL.ID_PERT as ID_PRB
FROM FIRE.OSI_DEVIATION_PLANS DP
) DP
ON WI.ID_PERT = DP.ID_PERT;
:
SELECT (CASE WHEN NOT EXISTS (SELECT 1
FROM FIRE.OSI_DEVIATION_PLANS DP
WHERE WI.ID_PERT = DP.ID_PERT
)
THEN 'Absence' ELSE 'Present'
END) as Disturbance,
FROM FIRE.WSITE WI ;
此查询通常写为:
a + b + c
这为优化提供了更多机会。