2016-10-04 59 views
0

我的Oracle SQL是新的,我試圖做一個表的下一個方面的更新:我如何使用相同的ID更新Oracle中的多個列?

我有一個表答:

+---------+---------+---------+----------+ 
| ColumnA | name | ColumnC | Column H | 
+---------+---------+---------+----------+ 
| 1  | Harry | null | null  | 
| 2  | Harry | null | null  | 
| 3  | Harry | null | null  | 
+---------+---------+---------+----------+ 

和表格B:

+---------+---------+---------+ 
| name | ColumnE | ColumnF | 
+---------+---------+---------+ 
| Harry | a  | d  | 
| Ron  | b  | e  | 
| Hermione| c  | f  | 
+---------+---------+---------+ 

而且我想更新表A,使結果將是下一個:

+---------+---------+---------+----------+ 
| ColumnA | name | ColumnC | Column H | 
+---------+---------+---------+----------+ 
| 1  | Harry | a  | d  | 
| 2  | Harry | a  | d  | 
| 3  | Harry | a  | d  | 
+---------+---------+---------+----------+ 

我怎麼能這樣做?

回答

2
merge into tableA a 
using tableB b 
on (a.name=b.name) 
when matched then update set 
columnC = b.columnE, 
columnH = b.columnF 


create table tableA (columnC varchar2(20), columnH varchar2(20), name varchar2(20), columnA number); 
create table tableB (columnE varchar2(20), columnF varchar2(20), name varchar2(20)); 
insert into tableA values (null, null,'Harry',1); 
insert into tableA values (null, null,'Harry',3); 
insert into tableA values (null, null,'Harry',3); 
insert into tableB values ('a', 'd','Harry'); 
insert into tableB values ('b', 'e','Ron'); 
insert into tableB values ('c', 'f','Hermione'); 
select * from tableA; 
merge into tableA a 
using tableB b 
on (a.name=b.name) 
when matched then update set 
columnC = b.columnE, 
columnH = b.columnF; 
select * from tableA; 

我沒有錯誤

+0

我得到錯誤「錯誤:ORA-00906:缺少左括號」 – jartymcfly

+0

對不起。我編輯了這篇文章。在表A中,名稱值是相同的(「哈利」,「哈利」,「哈利」)。因此,我想根據名稱值根據表B中列E和F的值填充各個值C和H的值。 – jartymcfly

+0

我粘貼了你測試過的代碼。有用。括號中沒有錯誤。請檢查你在執行什麼 – Kacper

0
UPDATE tableA t1 
SET (ColumnC, ColumnH) = (SELECT t2.ColumnE, t2.ColumnF 
        FROM table2 t2 
        WHERE t1.name = t2.name) 
WHERE EXISTS (
SELECT 1 
    FROM table2 t2 
WHERE t1.name = t2.name) 

這應該有效。您可以參考這個答案的詳細信息: Oracle SQL: Update a table with data from another table

+0

我得到的錯誤:錯誤:ORA- 01427:單行子查詢返回多行。那我怎麼解決它? – jartymcfly

+0

對不起。我編輯了這篇文章。在表A中,名稱值是相同的(「哈利」,「哈利」,「哈利」)。因此,我想根據名稱值根據表B中列E和F的值填充各個值C和H的值。 – jartymcfly

0

我想你可以使用下面的查詢和更新表A

更新與「a」和「d」的所有行;

update table A 
set (columnC , columnh) = (SELECT COLUMNE,COLUMNF 
             FROM TABLE B 
            where b.name =a.name); 

另外,您還可以使用:

UPDATE (SELECT T2.COLUMNE COLE,        
       T2.COLUMNF COLF, 
       T1.COLUMNC COLC, 
       T1.COLUMNH COLH 
     FROM tableB T2, 
      tableA T1 
     WHERE T1.NAME = T2.NAME)   
SET COLC = COLE, 
    COLH = COLF ;  

和輸出是:

+---------+---------+---------+----------+ 
| ColumnA | name | ColumnC | Column H | 
+---------+---------+---------+----------+ 
| 1  | Harry | a  | d  | 
| 2  | Harry | a  | d  | 
| 3  | Harry | a  | d  | 
+---------+---------+---------+----------+ 
+0

對不起。我編輯了這篇文章。在表A中,名稱值是相同的(「哈利」,「哈利」,「哈利」)。因此,我想根據名稱值根據表B中列E和F的值填充各個值C和H的值。 – jartymcfly

+0

然後就變得更簡單了。只需在第一個查詢中更新名稱即可。 – XING

相關問題