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
Oracle SQL에서 표1을 표2로 갱신할 수 있는 SQL 갱신 쿼리를 실행하려면 어떻게 해야 합니까?name
그리고.desc
같은 방법으로id
그래서 내가 얻게 될 최종 결과는
표 1:
id name desc
-----------------------
1 x 123
2 y 345
3 c adf
다른 테이블, 특히 Oracle SQL의 데이터를 사용하여 한 테이블을 업데이트할 때 질문을 받습니다.
이를 상관 업데이트라고 합니다.
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
이것을 시험해 보세요.
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;
해라
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);
Update table set column = (select...)
set은 1개의 값만 예상하므로 작동하지 않습니다. SQL Error: ORA-01427: single-row subquery는 여러 행을 반환합니다.
해결책은 다음과 같습니다.
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 워크시트에서 실행하는 방법은 이와 같습니다.느리다고들 하지만 이 사건에서 나한테는 그게 유일한 해결책이야.
가입에 대해 여러 키를 사용할 수 있는 '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 입니다.링크가 정지되어 있기 때문에 웹 아카이브에서 입수할 수 있습니다.
beep는 where 절의 괄호 안에 키로 사용할 열이 있고 괄호 안에 동일한 열 이름을 가진 select 문이 있습니다.여기서 (column1,column2) in (테이블에서 (column1,column2) "원하는 세트" 선택);
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;
테이블 t1과 백업 t2에 열이 많이 있는 경우 다음과 같은 간단한 방법이 있습니다.
또한 일부 열만 수정되고 많은 행이 이러한 열을 편집하지 않았기 때문에 그대로 두려고 했습니다. 기본적으로 전체 테이블의 백업에서 열의 일부를 복원합니다.모든 행을 복원하는 경우 where 구를 건너뜁니다.
물론 선택하신 대로 삭제하고 삽입하는 것이 더 간단한 방법이지만, 저 같은 경우에는 업데이트만 한 솔루션이 필요했습니다.
비결은 중복된 열 이름을 가진 테이블 쌍에서 *를 선택하면 두 번째 테이블이 _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, ...
언급URL : https://stackoverflow.com/questions/7030699/oracle-sql-update-a-table-with-data-from-another-table
'sourcecode' 카테고리의 다른 글
플러그인에서 워드프레스 업로드 파일/이미지 코드를 사용하는 방법 (0) | 2023.02.27 |
---|---|
각진 상태JS 진짜 MVC? (0) | 2023.02.27 |
WordPress에서 XML-RPC가 활성화되었는지 확인하는 방법 (0) | 2023.02.27 |
사용자 정보를 CSV로 내보내기 - 추가 컬럼 (0) | 2023.02.27 |
NodeJS에서 JSON이 비어 있는지 확인하려면 어떻게 해야 합니까? (0) | 2023.02.27 |