Oracle SQL-업데이트 열 데이터를 사용하여 마이너스 통신수

0

질문

나는 이 sql 쿼리

(select x.a, x.b, x.c, x.d
from tableX x
where x.a IS NOT NULL
minus 
select y.a, y.b, y.c, y.d
from tableY y);

위의 질의 반환 모 tableX 데이터,다른 tableY. 여러 튜플이 반환됩

증거들이 있습니다.:

을 실행할 때 위의 질이 결과:

a b c
1 43 65
2 66 333

가 선택한 데이터 tableY 이것을 얻을:

a b c
1 54 65
2 88 567

tableY 데이터가 정확한 데이터를,그래서 모두 업데이트 튜플 반환되는 처음부터 쿼리(하나로 마이너스 절)과 데이터 tableY.

예상한 결과,후 업데이트 절가 선택한 데이터 tableX 어야 한다:

a b c
1 54 65
2 88 567

무엇이 가장 eficcient 방법을 이렇게 업데이트 절?

oracle plsql sql
2021-11-23 19:18:31
2

최고의 응답

1

Oracle 찾을 병합 구문을 훨씬 더 유용하다 업데이트 구문을...

MERGE INTO
  tablex   x
USING
  tabley   y
    ON (y.a = x.a)
WHEN MATCHED THEN UPDATE
  SET
    x.b = y.b,
    x.c = y.c
  WHERE
    LNNVL(x.b = y.b)
    OR
    LNNVL(x.c = y.c)

편집:첨가 where 절을 방지 중복 업데이트,다음 below.

2021-11-23 20:50:15

는 행 x.b=y.b x.c=y.c 트랜잭션에 포함된?
jarlh

@jarlh 추가 where 절을 WHEN MATCHED 을 피하는 시나리오이다.
MatBailie

이 솔루션을 해결 제 질문,당신을 감사
jct
0
update tablex
set (b, c) = (select b, c from tabley where tabley.a = tablex.a)
where exists (select 1 from tabley where tabley.a = tablex.a);

을 유지하는 트랜잭션 크기를 추가,xb<>yb 또는 xc<>yc:

update tablex
set (b, c) = (select b, c from tabley where tabley.a = tablex.a)
where exists (select 1 from tabley
              where tabley.a = tablex.a
                and (LNNVL(tabley.b = tablex.b) or LNNVL(tabley.c = tablex.c)));
2021-11-23 20:39:46

다른 언어로

이 페이지는 다른 언어로되어 있습니다

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................