2017-07-15 63 views
-2

更新我有三个表:甲骨文:选择并在同一时间

Table-1: Column1 | Column2 | Column 3 
Table-2: Column4 | Column5 | ColumnUpdate 
Table-3: Column7 | Column8 

我需要一些行从表2中根据一定的条件与表1复制到表-3:

我的插入语句如下:

INSERT INTO Table-3 (
    Column7, 
    Column8) 
SELECT Table-2.COLUMN4, Table-2.COLUMN5 
FROM Table-2 INNER JOIN Table-1 
ON Table-2.COLUMN4 = TABLE-1.Column1; 

但是我想更新列:1 ColumnUpdate‘”选择列(表2)’

因此,我选择了一些行并立即想要将该行中的进程列更新为'1'。

我不知道该怎么做。我看到一些带有“OUTPUT”子句或“UPDATE FOR”子句的例子,但我并不完全知道如何在我的声明中使用它们。

+0

才刚刚拉起文档的'UPDATE'声明(这是很容易找到)。 –

+0

Thx为您快速回复,我在发布问题之前做了一些调查。我不知道如何在我的声明中加入Update-statement来实现这一点。基本上,我想更新所选的行,我复制,所以它被标记为“复制” – NoName123

+0

这可能是帮助你:[https://stackoverflow.com/questions/237327/oracle-how-to-upsert-update - 或 - 插入表中](https://stackoverflow.com/questions/237327/oracle-how-to-upsert-update-or-insert-into-a-table) –

回答

1
MERGE 
    INTO target_table t1 
    USING (SELECT col1, col2 
       FROM source_table 
       WHERE //conditions here) s1 
    ON (t1.id = s1.id) 
    WHEN MATCHED THEN 
    UPDATE SET column_update = '1' 
    WHEN NOT MATCHED THEN 
    INSERT (col1, col2) 
    VALUES (s1.col1, s1.col2) 
    WHERE (// condition here); 

UPDATE

BEGIN 
    FOR temp_var IN (
    SELECT * from table_a 
    WHERE table_a.col1 = table_b.col1) 
    LOOP 
     // INSERTING INTO TARGET TABLE 
     INSERT INTO table_b 
     VALUES(temp_var.col1, temp_var.col2); 
     // UPDATING SOURCE TABLE 
     UPDATE table_a 
     SET status = 'COPIED' 
     WHERE col1 = temp_var.col1; 
    END LOOP; 
END; 
+0

Thx,但我需要实施不同的逻辑或者我可能是错的。 当我从源表中“复制”选定的行时,我需要更新源表中的列,因此它被标记为“复制”...因此,当我向目标表中插入新行时,我想在源表中将此行标记为“已复制”。 因此,我需要在语句“WHEN NOT MATCHED THEN”之后更新此列,因为在此子句中,新行将插入到目标表中 – NoName123

+0

复制的条件是什么? – fg78nc

+0

Sry回答这么晚(我的电脑有问题...... bluescreen)。 我有两个表(比方说A和B)与几乎相同的数据。这些表格之间的区别在于其中一个包含更多信息(更多列)。我需要根据条件(A.id = b.id)将该表(A或B)中的数据复制到第三个表(C)中。当我复制行..我必须标记该行复制到源表中(通过将列“update_column”设置为1) – NoName123