2016-10-04 3 views
0

나는 오라클 SQL의 새로운 그리고 난 다음 컨텍스트 테이블의 업데이트 만들려고 노력하고 있어요 :동일한 ID로 Oracle에서 여러 열을 어떻게 업데이트 할 수 있습니까?

나는 테이블 A가 :

+---------+---------+---------+----------+ 
| 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에서 이름 값은 동일합니다 ("Harry", "Harry", "Harry"). 그래서 이름 값에 따라 표 B의 열 E 및 F에있는 값에 따라 C 및 H 열의 값을 각각의 값으로 채 웁니다. – jartymcfly

+0

테스트 한 whoole 코드를 붙여 넣었습니다. 그것은 작동합니다. 나는 괄호에 대해 아무런 오류가 없다. 무엇을하고 있는지 확인하십시오 – 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에서 이름 값은 동일합니다 ("Harry", "Harry", "Harry"). 그래서 이름 값에 따라 표 B의 열 E 및 F에있는 값에 따라 C 및 H 열의 값을 각각의 값으로 채 웁니다. – jartymcfly

0

난 당신이 쿼리 아래 사용

업데이트 당신의 테이블 A. 'A'와 'D'모든 행을 업데이트 할 수 있습니다 생각;

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 ;  

및 출력은 다음과 같습니다 :

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

또는 당신은 또한 사용할 수 있습니다

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

죄송합니다. 나는 그 지위를 편집했다. 표 A에서 이름 값은 동일합니다 ("Harry", "Harry", "Harry"). 그래서 이름 값에 따라 표 B의 열 E 및 F에있는 값에 따라 C 및 H 열의 값을 각각의 값으로 채 웁니다. – jartymcfly

+0

그러면 더 간단 해집니다. 첫 번째 쿼리에서 이름을 업데이트하면됩니다. 편집하십시오. – XING

관련 문제