Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当SQL语句出现时,如何处理不存在的记录?_Sql_Oracle11g_Null_Sql Update_Case - Fatal编程技术网

当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
。非常感谢。