在oracle中选择后更新行

时间:2017-10-11 19:15:28

标签: oracle

我在表中有一个查询,然后是select,我需要更新同一个表中的一列。

THE TABLE

CREATE TABLE CLIENTE
(
    RUT           VARCHAR2(14), 
    FONO1   VARCHAR(20),
    FONO2   VARCHAR(20),
    FONO3   VARCHAR(20),
    FONO4   VARCHAR(20),
    FONO5   VARCHAR(20),
    FONO6   VARCHAR(20),
    FLAG    CHAR(1)
)
;

CREATE TABLE TEMPORAL
    (
        RUT           VARCHAR2(14), 
        FONO1   VARCHAR(20),
        FONO2   VARCHAR(20),
        FONO3   VARCHAR(20),
        FONO4   VARCHAR(20),
        FONO5   VARCHAR(20),
        FONO6   VARCHAR(20),
        FLAG    CHAR(1)
    )
    ;

THE QUERY

SELECT CL.* FROM CLIENTE CL
INNER JOIN TEMPORAL TM
ON CL.RUT = TM.RUT;
WHERE CL.FLAG = 'N';

这里我需要在select的行中用'Y'更新“FLAG”列。

1 个答案:

答案 0 :(得分:1)

  

我需要更新同一个表中的列

     

...

     

这里我需要更新列" FLAG"与' Y'

我认为你的意思是表CLIENTE。您可以使用任何这些查询。

使用MERGE INTO

MERGE INTO CLIENTE m
USING 
(
    SELECT CL.RUT, CL.FLAG FROM CLIENTE CL
    INNER JOIN TEMPORAL TM
    ON CL.RUT = TM.RUT
    WHERE CL.FLAG = 'Y'
) c ON ( m.RUT = c.RUT ) 
WHEN matched then UPDATE SET m.FLAG = 'N';

使用EXISTS

UPDATE cliente CL
SET    CL.flag = 'Y'
WHERE  EXISTS (SELECT 1
               FROM   temporal TM
               WHERE  CL.rut = TM.rut
                      AND CL.flag = 'N');