有一个cert表
有字段double_certsn,subject和cert_status
其中相同subject项的列会对应有2条以上的相同数据,但是其中只有一条的double_certsn值不为空。
我想实现的目标是让相同的subject项的所有列的double_certsn都等于那个不为空的值原来用SQL可以实现,语句如下:
UPDATE A SET
    double_certsn=B.double_certsn
FROM cert AS A
    JOIN cert AS B
        ON A.subject=B.subject
WHERE B.double_certsn IS NOT NULL
    AND A.double_certsn IS NULL
        AND A.cert_status='use'
go现在数据库变为oracle了,运行的时候报错,请各位看看,怎么改成oracle
可以运行的语句

解决方案 »

  1.   

    update cert t set double_certsn=(select distinct double_certsn from cert a where a.double_certsn is not null and a.subject=t.subject ) 
    这是不考虑cert_status保持一致,如果要的话,可以仿照改下,distinct 为了防止会有两个相同的double_certsn
      

  2.   


      UPDATE cert A
         SET A.double_certsn = (SELECT B.double_certsn
                                  FROM cert B
                                 WHERE B.subject = A.subject
                                   AND B.double_certsn IS NOT NULL )
       WHERE A.double_certsn IS NULL;