2017-10-11 53 views
-3

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

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) 
    ) 
    ; 

查询

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

在这里,我需要 'Y' 只是在选择的行与更新列 “标志”。

+0

你是什么意思的 “更新” - 在基表的实际更新(一个'UPDATE'或许'MERGE'声明)?或者只是在查询的输出? – mathguy

回答

1

我需要更新在同一个表和列

...

在这里,我需要更新列“旗帜”与“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');