2016-10-04 61 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

相关问题