[SQL] 오라클 SQL은 : 다른 테이블의 데이터로 테이블을 업데이트
SQL오라클 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에서 어떻게 표 2의 이름과 내림차순이 동일한 ID를 사용하여 표 1을 업데이트 할 수있는 SQL 업데이트 쿼리를 실행합니까? 내가 얻을 것 최종 결과는 그래서
1 번 테이블:
id name desc
-----------------------
1 x 123
2 y 345
3 c adf
질문하지만, 특히 오라클 SQL에 대한 다른 데이터로 업데이트 한 테이블에서 가져옵니다.
해결법
-
==============================
1.이것은 상관 갱신이라고합니다
이것은 상관 갱신이라고합니다
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
-
==============================
2.이 시도:
이 시도:
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;
-
==============================
3.시험
시험
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);
-
==============================
4.
Update table set column = (select...)
ORA-01427 : 단일 행 부질의 반환 둘 이상의 행 SQL 오류 - 세트는 1 개 값을 기대하고 있기 때문에 나를 위해 일하지 않았다.
여기에 솔루션입니다 :
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;
즉, SQLDeveloper 워크 시트에서 실행하는 방법을 정확히. 그들은 느린하지만이 경우에 나를 위해 일한 유일한 솔루션입니다 말한다.
-
==============================
5.여기 가입에 대한 여러 키를 허용 조항 '에'와 더 좋은 해답이 될 것 같다 :
여기 가입에 대한 여러 키를 허용 조항 '에'와 더 좋은 해답이 될 것 같다 :
update fp_active set STATE='E', LAST_DATE_MAJ = sysdate where (client,code) in (select (client,code) from fp_detail where valid = 1) ...
쇠고기는 '에'전에 WHERE 절에 괄호 키로 사용하고 괄호 안에 동일한 열 이름을 가진 select 문을하려는 열을 가지는입니다. 어디에서 (1 열, 2 열) (선택 (컬럼 1, 테이블 2 열) 여기서 "설정 내가 원하는");
-
==============================
6.당신의 테이블 t1과의 백업 T2는 많은 열이있는 경우, 여기에 그것을 할 수있는 컴팩트 한 방법이다.
당신의 테이블 t1과의 백업 T2는 많은 열이있는 경우, 여기에 그것을 할 수있는 컴팩트 한 방법이다.
기본적으로 전체 테이블의 백업에서 컬럼의 서브 세트를 복원 - 또한, 내 관련 문제는 일부 열이 수정 된 나는 그 혼자두고 싶어 너무 많은 행이이 컬럼에 더 편집이 없다고했다. 당신은 단지 모든 행을 복원하려면, where 절을 건너 뜁니다.
물론 간단한 방법은 삭제하고 선택으로 삽입하는 것입니다,하지만 내 경우에는 그냥 업데이트 솔루션이 필요했습니다.
트릭은 당신이 중복 된 열 이름과 테이블의 한 쌍에서 선택 *를 수행 할 때, 제 2 하나 _1 이름을 얻을 것입니다. 그래서 여기 내가 생각 해낸 무엇 :
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, ...
-
==============================
7.
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;
from https://stackoverflow.com/questions/7030699/oracle-sql-update-a-table-with-data-from-another-table by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 의 특정 값에 대한 모든 필드에서 모든 테이블을 검색 (오라클) (0) | 2020.03.09 |
---|---|
[SQL] MySQL의에 그렇지 않은 경우 (일명 "upsert"또는 "병합")을 삽입있는 경우 어떻게 업데이트하나요? (0) | 2020.03.09 |
[SQL] 사용하여 SQL 업데이트 쿼리 조인 (0) | 2020.03.09 |
[SQL] MySQL은 여러 업데이트 (0) | 2020.03.09 |
[SQL] 권장 SQL 데이터베이스 태그의 디자인 또는 태그 [마감] (0) | 2020.03.08 |