簡體   English   中英

如何在 Oracle 中使用帶有 CASE 語句的更新命令?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM