当SQL语句出现时,如何处理不存在的记录?
我正试图根据当SQL语句出现时,如何处理不存在的记录?,sql,oracle11g,null,sql-update,case,Sql,Oracle11g,Null,Sql Update,Case,我正试图根据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 con
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
。在这种情况下,我想在H.COLH
的实际值为“N”时,将T.COL
设置为“N”
当H.COLH为NULL时添加无效。我试图将整个SELECT
包装到另一个SELECT。。。从DUAL
与另一个CASE/WHEN/ELSE
,但它返回多个值
有没有一种方法可以将NULL
值视为“N”,即使TBLH
中没有记录(更不用说TBLH.COLH
)
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 */
我将这样写:
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 */
我认为存在
可以更好地捕获您想要的逻辑。它确实完美地捕获了逻辑。我不知道一个人可以这样使用CASE
。非常感谢。