我正在尝试根据SELECT
从其CASE/WHEN/ELSE
语句返回值的UPDATE TBL T
SET T.COL1 = (
SELECT
CASE
WHEN H.COLH = 'XY' THEN 'Y'
ELSE 'N'
END
FROM HTBL H
WHERE T.ID = H.ID
AND /* Other conditions */
)
WHERE T.RN = 100
AND /* Other conditions */
更新列的值,例如
HTBL
问题是,如果T.COL
表中不存在该记录,则不会为T.COL
分配任何值,因此NULL
仍为T.COL
。在这种情况下,我只想在H.COLH
的实际值为'N'时将WHEN H.COLH IS NULL
设置为'N'。
添加SELECT
不起作用。我试图将整个SELECT... FROM DUAL
用另一个CASE/WHEN/ELSE
包装在另一个NULL
中,但是它返回多个值。
即使TBLH
中没有记录(更不用说TBLH.COLH
)了,有没有办法将include (${CMAKE_ROOT}/Modules/FindJPEG.cmake)
的值视为'N'?
答案 0 :(得分:1)
您可以将子查询包装在COALESCE
中:
UPDATE TBL T
SET T.COL1 = COALESCE( (
SELECT
CASE
WHEN H.COLH = 'XY' THEN 'Y'
ELSE 'N'
END
FROM HTBL H
WHERE T.ID = H.ID
AND /* Other conditions */
), 'N')
WHERE T.RN = 100
AND /* Other conditions */
答案 1 :(得分:1)
我会这样写:
UPDATE TBL T
SET T.COL1 = (CASE WHEN EXISTS (SELECT 1
FROM HTBL H
WHERE T.ID = H.ID AND
/* Other conditions */ AND
H.COLH = 'XY'
)
THEN 'Y' ELSE 'N'
END)
WHERE T.RN = 100 AND
/* Other conditions */
我认为EXISTS
也可以更好地捕捉您想要的逻辑。