2017-07-07 8 views
0

Hallo, ich habe diese Tabelle.Update einzigartige Tabelle 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 

ich diese Tabelle müssen verwandeln ..

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 

Ich habe diese QRY aber nicht funktionieren. Sie haben eine Idee?

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'; 

Danke.

Antwort

1

Sie benötigen eine Unterabfrage den Wert zu setzen:

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 nur in der Unterabfrage bekannt ist, nicht in der äußeren Abfrage.

+0

Hallo ich benutze diese qry aber nicht Funktion. ORA-01427: Einreihige Unterabfrage gibt mehr als eine Zeile zurück. Ich verstehe dieses Qry, aber nicht diesen Fehler zu treffen. –

+0

@SantiagoEspitia. . . Offensichtlich haben Sie einige Addr-Werte, die zwei oder mehr pri-Reihen haben. Das 'und rownum = 1' wählt willkürlich eines von ihnen aus. –

1

Im Folgenden wird das tun, was Sie wollen:

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' 

Best of luck.