[英]How to use Update command with CASE statement in Oracle?
我必須根據以下條件更新匹配標志列:
當 F_ZN=IC_ZN AND F_STN=IC_STN 然后匹配標志將設置為 1 否則為 0,我可以想到這一點,但我不知道確切的語法。
UPDATE F_STATE_MAPPING SET MATCHING_FLAG=CASE WHEN F_ZN=IC_ZN AND F_STN=IC_STN THEN 1 ELSE 0 END
FROM
(
SELECT F_ZN,F_STN,IC_ZN,IC_STN FROM
(
SELECT A.ZN_CD AS F_ZN,A.STN AS F_STN,B.ZN_CD AS IC_ZN,B.STN AS IC_STN FROM
F_STATE_MAPPING A,TEMP_STN_STATE_MAPPING B WHERE A.ZN_CD=B.ZN_CD AND A.STN=B.STN
)
)
F_STATE_MAPPING 表的架構是
ZN_CD VARCHAR2(4)
STN VARCHAR2(4)
MATCHING_FLAG NUMBER(1)
請指導。
你關於使用exists
嗎?
UPDATE F_STATE_MAPPING
SET MATCHING_FLAG = (CASE WHEN EXISTS (SELECT 1
FROM TEMP_STN_STATE_MAPPING
WHERE F_ZN = IC_ZN AND F_STN = IC_STN
)
THEN 1 ELSE 0
END) ;
如果要更新表的列,它必須首先存在:
ALTER TABLE F_STATE_MAPPING ADD MATCHING_FLAG int
然后你可以更新它
UPDATE
(
SELECT A.MATCHING_FLAG,
CASE WHEN (A.ZN_CD=B.ZN_CD AND A.STN=B.STN) THEN 1 ELSE 0 END AS NEWVALUE
FROM F_STATE_MAPPING A
LEFT JOIN TEMP_STN_STATE_MAPPING B ON A.ZN_CD=B.ZN_CD AND A.STN=B.STN
) t
SET t.MATCHING_FLAG = t.NEWVALUE
也可以寫成:
UPDATE
(
SELECT A.MATCHING_FLAG,
CASE WHEN (B.ZN_CD is null) THEN 0 ELSE 1 END AS NEWVALUE
FROM F_STATE_MAPPING A
LEFT JOIN TEMP_STN_STATE_MAPPING B ON A.ZN_CD=B.ZN_CD AND A.STN=B.STN
) t
SET t.MATCHING_FLAG = t.NEWVALUE
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.