2010-07-29 2 views
0

테이블 (종속성)을 업데이트하고 새 열 (vid)을 시퀀스의 nextval로 설정해야합니다. 데이터가 테이블에있는 방식을 변경할 수 없으므로 중복 된 데이터를 제거하는 것에 대해서는 언급하지 마십시오.두 개의 개별 조건을 기반으로 db 테이블 업데이트

그러나 where 조건은 2 조건이 충족되어야하는 경우에 문제가됩니다 (cols provid 및 origid). 별도의 기본 키 (prikey)가 있습니다. 표는 다음과 같다 : -

Table dependency (
    varchar prikey(46), 
    varchar provid(46), 
    varchar origid(46) 
    varchar otherdata(16) 
    vid integer 
) 

샘플 데이터는 다음과 같이 보일 것이다 : -이

으로 데이터에서 볼 수 에서, prikey이 고유

(prikey, ORIGID, PROVID, VID) 
('AA1', 'C3C87F000001', '23', 1), 
('AA2', 'C3C87F000001', '23', 1), 
('AA3', 'C3C87F000001', '26', 2), 
('AA4', 'C3C87F000001', '53', 3) 
('AA5', 'A3C87F000009', '26', 4), 
('AA6', 'A3C87F000009', '23', 5) 
의 origid하고 제공하기 (실제로있는 Foreign Keys)가 반복 될 수 있습니다. 이 예제에서는 Vid 값을 추가해야합니다. vid는 기본적으로 origid가 동일한 provid 인 행을 식별합니다.

내 질문 :이 테이블 설정을 업데이트하기위한 SQL은 무엇입니까 vid = sequence.nextval origid 및 distinct (provid)?

+0

이 도움이 될 것입니다 http://stackoverflow.com/questions/3297102/auto-generating-column-value-with-respect-to-another-column/3297154 # 3297154 – Tobiasopdenbrouw

답변

0

시도 : 시작하기

merge into dependency 
USING (SELECT DENSE_RANK() OVER (ORDER BY prikey, ORIGID, PROVID) g, prikey rid FROM dependency) SOURCE 
ON (dependency.prikey = SOURCE.prikey) 
WHEN MATCHED THEN UPDATE SET dependency.vid = SOURCE.g 
관련 문제