2017-07-07 63 views
0

你好,我有這張表。更新唯一表SQL

ADDR  | STATE | ID 
CRA.20 15 | REP | (null) 
CRA.20 15 | REP | (null) 
CRA.20 15 | REP | (null) 
CRA.20 15 | PRI | RR_88_JK 

我需要改變這個表..

ADDR  | STATE | ID 
CRA.20 15 | REP | RR_88_JK 
CRA.20 15 | REP | RR_88_JK 
CRA.20 15 | REP | RR_88_JK 
CRA.20 15 | PRI | RR_88_JK 

我有這個QRY而不是功能。你有一個想法?

UPDATE TABLE_A A 
    SET a.ID = b.ID 
WHERE EXISTS 
      (SELECT b.ID 
       FROM TABLE_A B 
      WHERE a.ADDR = B.ADDR AND b.STATE = 'PRI') 
and A.STATE = 'REP'; 

謝謝。

回答

1

你需要一個子查詢中設置的值:

UPDATE TABLE_A A 
    SET a.ID = (SELECT b.ID 
       FROM TABLE_A B 
       WHERE a.ADDR = B.ADDR AND b.STATE = 'PRI' AND rownum = 1 
      ) 
    WHERE EXISTS (SELECT b.ID 
       FROM TABLE_A B 
       WHERE a.ADDR = B.ADDR AND b.STATE = 'PRI' 
       ) AND 
     A.STATE = 'REP'; 

B僅在子查詢知,而不是在外部查詢。

+0

你好,我使用這個qry,但沒有功能。 ORA-01427:單行子查詢返回多行。我明白這個問題,但沒有遇到這個錯誤。 –

+0

@SantiagoEspitia。 。 。顯然,你有一些'addr'值有兩個或更多'pri''行。 '和rownum = 1'任意選擇其中之一。 –

1

下面將做你想要什麼:

UPDATE TABLE_A A 
    SET a.ID = (SELECT MIN(ID) 
       FROM TABLE_A 
       WHERE ID IS NOT NULL AND 
         STATE = 'PRI') 
    WHERE ID IS NULL AND 
     STATE = 'REP' 

好運。