2017-07-07 41 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' 

好运。