다 중 표 관련 동시 업데이트 여러 기록 방법 공유

4987 단어 다 중 표 관련
다음은 테스트 예.1.우선 임시 표 두 장 을 만 들 고 테스트 데 이 터 를 입력 합 니 다
 
create table #temptest1
(
id int,
name1 varchar(50),
age int
)
create table #temptest2
(
id int,
name1 varchar(50),
age int
)
이 표 의 데 이 터 를 다음 과 같이 조회 합 니 다.
#temptest1                 #temptest2
   
 
2.이제\#tempst 2 의 나 이 를 해당 하 는\#tempst 1 의 나이 로 업데이트 해 야 합 니 다.
사실은[표 1]에서 ID 가 1 인 나 이 를 19 로 바 꾸 고 ID 가 2 인 나 이 를 20 으로 바 꾸 는 것 이다.
물론 이곳 의 요 구 는 SQL 한 마디 만 사용 하고 순환 을 사용 할 수 없다 는 것 이다.
결 과 는 다음 과 같다.

 
실현 방법 은 다음 과 같다.
Update t1 
Set t1 .age = t2.age
From  #temptest1 t1
Join #temptest2 t2
On  t1.id = t2.id
 
(보충)Sql Server 2008 Merge 명령 작성 방법:
merge into #temptest1 t1 using(select age,id from #temptest2) t2on t1.id = t2.idwhen matched thenupdate set t1.age = t2.age
 
재 밌 지?Sql?여러 개의 서로 다른 값 의 기록 제목 을 한꺼번에 업데이트 하 는 방법 은 명확 하 게 말 하지 못 했 을 수 있 습 니 다.만약 에 두 장의 표 가 있다 고 가정 합 니 다
 
create table testA(
id number,
eng varchar2(3),
chi varchar2(3)
)
create table testB(
id number,
eng varchar2(3),
chi varchar2(3),
anythingother varchar2(1)
)
기 존 기록 testa:ID ENG CHI========================1 d 4 2 e 5 3 f 6 testb 에 기 록 된 ENG,CHI 필드 를 testa 에 업데이트 하여 ID 로 대응 하고 싶 습 니 다.CODE: SQL> set autot on SQL> update ta set ta.b=(select tb.b from tb where ta.a=tb.a) where exists (select 1 from tb where ta.a=tb.a); 4 줄 이 업데이트 되 었 습 니 다.사용 시간:00:00:00.01 실행 계획--------------------------------------------------------------------------------------------------------------------------------------------------------------------- | 0 | UPDATE STATEMENT | | 5 | 165 | 20 (30)| 00:00:01 | | 1 | UPDATE | TA | | | | | |* 2 | HASH JOIN SEMI | | 5 | 165 | 5 (20)| 00:00:01 | | 3 | TABLE ACCESS FULL | TA | 5 | 100 | 2 (0)| 00:00:01 | | 4 | VIEW | VW_SQ_1 | 4 | 52 | 2 (0)| 00:00:01 | | 5 | TABLE ACCESS FULL| TB | 4 | 52 | 2 (0)| 00:00:01 | |* 6 | TABLE ACCESS FULL | TB | 1 | 26 | 2 (0)| 00:00:01 | -------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 2 - access("TA"."A"="ITEM_1")6-filter("TB"."A"=:B1)Note 이 문(level=2)통계 정보 에 사용 되 는 동적 샘플링----------------------------------------------------------------------------------------------------------------------------------s to/from client 1 sorts (memory) 0 sorts (disk) 4 rows processed SQL> update ta set ta.b=(select tb.b from tb where ta.a=tb.a) where ta.a= (select tb.a from tb where ta.a=tb.a); 4 줄 이 업데이트 되 었 습 니 다.사용 시간:00:00:00.00 실행 계획--------------------------------------------------------------------------------------------------------------------------------------------------------------------UPDATE STATEMENT | | 1 | 20 | 7 (15)| 00:00:01 | | 1 | UPDATE | TA | | | | | |* 2 | FILTER | | | | | | | 3 | TABLE ACCESS FULL| TA | 5 | 100 | 2 (0)| 00:00:01 | |* 4 | TABLE ACCESS FULL| TB | 1 | 13 | 2 (0)| 00:00:01 | |* 5 | TABLE ACCESS FULL | TB | 1 | 26 | 2 (0)| 00:00:01 | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------"A"=(SELECT"TB","A","A"FROM"TB"""TB","TB""WHERE"TB","A","A")4-filter("TB"A","A","A"=:B1 5-filter("TB",재 귀 호출 1 db 블록 53 일 관 된 얻 을 얻 으 면 0 물리 적 읽 기 588 redo 크기 840 바 이 트 는 SQL 을 통 해 수신 클 라 이언 트 에 SQL*Net 를 통 해 클 라 이언 트 858 바 이 트 를 통 해 전송*클 라 이언 트 에서 Net 3 SQL*Net roundtrips 에/로부터 클 라 이언 트 1 sorts(메모리)0 sorts(디스크)4 행 처리 고유 한 인덱스 를 만 들 면 tba_uidx on tb(a); [Copy to clipboard] [ - ] CODE: SQL> update (select ta.b tab1 ,tb.b tbb from ta,tb where ta.a=tb.a) set tab1=tbb; 4 줄 이 업데이트 되 었 습 니 다.사용 시간:00:00:00.01 실행 계획-------------------------------------------------------------------------------------------------------------------------------------------------------------------UPDATE STATEMENT | | 4 | 184 | 5 (20)| 00:00:01 | | 1 | UPDATE | TA | | | | | |* 2 | HASH JOIN | | 4 | 184 | 5 (20)| 00:00:01 | | 3 | TABLE ACCESS FULL| TB | 4 | 104 | 2 (0)| 00:00:01 | | 4 | TABLE ACCESS FULL| TA | 5 | 100 | 2 (0)| 00:00:01 | ---------------------------------------------------------------------------- Predicate Information (identified by operation id*Net to client 827 bytes received via SQL*Net from client 3 SQL*Net roundtrips to/from client 3 sorts (memory) 0 sorts (disk) 4 rows processed

좋은 웹페이지 즐겨찾기