Oracle SQL: 다른 테이블을 데이터로 업데이트하려면 테이블

표 1:

id    name    desc
-----------------------
1     a       abc
2     b       def
3     c       adf

표 2:

id    name    desc
-----------------------
1     x       123
2     y       345

, Sql 업데이트하십시오 어떻게 실행합니까 oracle SQL 에 한 표 1 표 2& # 39 의 쿼리하지 업데이트할 수 있는 '이름' 와 '설명' 와 같은 'id'? 그래서 꼭 이래야겠어요 최종 결과를 얻을 수 있다.

표 1:

id    name    desc
-----------------------
1     x       123
2     y       345
3     c       adf

하지만 문제는 수행됨을 (https://stackoverflow.com/questions/5036918/sql-update-query-with-data-from-another-table) 에서 특별히 oracle sql.

질문에 대한 의견 (5)
해결책

이를 상관식 업데이트

UPDATE table1 t1
   SET (name, desc) = (SELECT t2.name, t2.desc
                         FROM table2 t2
                        WHERE t1.id = t2.id)
 WHERE EXISTS (
    SELECT 1
      FROM table2 t2
     WHERE t1.id = t2.id )

이 결과 주요 아니했으니 참가하십시오 것으로 볼 수도 있습니다

UPDATE (SELECT t1.id, 
               t1.name name1,
               t1.desc desc1,
               t2.name name2,
               t2.desc desc2
          FROM table1 t1,
               table2 t2
         WHERE t1.id = t2.id)
   SET name1 = name2,
       desc1 = desc2
해설 (9)

이거 드세요.

MERGE INTO table1 t1
USING
(
-- For more complicated queries you can use WITH clause here
SELECT * FROM table2
)t2
ON(t1.id = t2.id)
WHEN MATCHED THEN UPDATE SET
t1.name = t2.name,
t1.desc = t2.desc;
해설 (4)

시도하시겠습니까

UPDATE Table1 T1 SET
T1.name = (SELECT T2.name FROM Table2 T2 WHERE T2.id = T1.id),
T1.desc = (SELECT T2.desc FROM Table2 T2 WHERE T2.id = T1.id)
WHERE T1.id IN (SELECT T2.id FROM Table2 T2 WHERE T2.id = T1.id);
해설 (1)

39, & # 39 더 나은 답을 in& 함께 여기 있는 것으로 보인다. 대한 여러 키를 사용할 수 있는 조항을 참가하십시오 :

update fp_active set STATE='E', 
   LAST_DATE_MAJ = sysdate where (client,code) in (select (client,code) from fp_detail
  where valid = 1) ...

전체 비유하사 있습니다. http://forums.devshed.com/oracle-development-96/how-to-update-from-two-tables-195893.html

미국산 쇠고기 처럼 사용할 수 있는 키를 갖고 있는 열 보기할 in& # 39, & # 39 를 괄호 안에 전에, where 절 select 문은 열 이름을 갖고 있는 같은 괄호 안에. 여기서 ( column1, column2) 에서 ( 일부 ( column1, column2) 를 테이블로 &quot, 내가 want&quot 설정, );

해설 (0)
Update table set column = (select...)

이후 1 세트만 협력했습니다 가져다줄래요 결코 값 - SQL 오류가 있을 것으로 기대하고 있다. Ora 01427: 두 개 이상의 행을 서브케리 되돌려줍니다 단일 행.

39 의 here& 솔루션:

BEGIN
For i in (select id, name, desc from table1) 
LOOP
Update table2 set name = i.name, desc = i.desc where id = i.id;
END LOOP;
END;

S # 39 에서 실행할 때, 얼마나 정확하게 that& 자크 두벨퍼 워크시트를. 그들은 말하도다 it& # 39 의 느리지만 that& # 39 의 가져다줄래요 협력했습니다 유일한 솔루션으로 이번 사건에 대한.

해설 (6)

39 표, t1, t2 의 백업 it& 경우 많은 열을 here& # 39, 컴팩트형 길일 것이다.

또한, 내 관련 문제가 수정되었습니다 단 열 중 일부는 이 열 수 없었고, 그래서 내가 하고 싶은 그 편집, 많은 행뿐만 남겨두십시오 내려졌단 - 기본적으로 열 서브셋 리스토어하며 백업하도록 에서 전체 테이블. 그냥 스케쳐내 리스토어할 건너뛰십시오 모든 행, where 절.

물론 이 길을 따라 선택할 수 있지만, 내 경우에는 기재하십시오 삭제하시겠습니까 간단해진다는 약간만이라도 내가 필요한 솔루션 부트해 업데이트뿐.

Select * from a 페어당 재주 있는 작업을 할 때 한 예: _1) 라는 이름을 가진 테이블의 복제본임을, 제 2 열 받게 된다. 그래서 here& # 39, s what I came up with:

  update (
    select * from t1 join t2 on t2.id = t1.id
    where id in (
      select id from (
        select id, col1, col2, ... from t2
        minus select id, col1, col2, ... from t1
      )
    )
  ) set col1=col1_1, col2=col2_1, ...
해설 (1)
BEGIN
For i in (select id, name, desc from table2) 
LOOP
Update table1 set name = i.name, desc = i.desc where id = i.id and (name is null or desc is null);
END LOOP;
END;
해설 (0)