在MSSQL里,我是这样关联表更新数据库的UPDATE TABLE1
SET COL1=B.COL1,COL2=B.COL2
FROM TABLE1 A INNER JOIN TABLE2 B
ON A.COL3=B.COL3
WHERE A.COL4='1' AND B.COL4='2'
但到了ORACLE(9i/10g),以上语句该如何修改才能运行?

解决方案 »

  1.   

    update table1 a set (a.col1,a.col2) = (select b.col1,b.col2 from table2 b where a.col3 = b.col3 and a.col4 = '1' and b.col4 = '2')
    where exists (select 1 from table2 b where a.col3 = b.col3 and a.col4 = '1' and b.col4 = '2')
      

  2.   

    执行是可以执行,但提示以下:(非SQL出错)TABLE1.COL1的值太大(实际值32,最大值25)我的TABLE1的COL1值是装着 java.util.UUID.randomUUID() 自动生成的唯一序列号值举例如下:041d1ccb-1f1b-4e67-bb9f-e5e359a49af4
    0c20f6e8-7b81-401d-b59f-511aff489b26
    1d0d61e6-50e4-4485-a099-8b7af31194ec
    4f5f14cb-1820-48f1-9a5d-fc7ca7395d02
    69f5bf41-e565-4108-936c-890820fc4e57
    求如何办?
      

  3.   

    查看下是否因为table1.col1列的最大长度不够?
      

  4.   


    update ORDER1 a 
    set (a.PID,a.PRESSNAME2) = (select b.PID,b.PRESSNAME from T_PRESS_POST b where a.PRESSCODE = b.PRESSCODE)
    where exists (select 1 from T_PRESS_POST b where a.PRESSCODE = b.PRESSCODE) 即使将数据截小后,仍有以下错误:“ORA01427 单行子查询返回多个行”
      

  5.   

    是因为PRESSCODE关联下,对于表a的一条记录有多条表b的记录对应比如对于表a中的记录1,表b中有(1,2),(1,3)两条记录对应,这种情况下是该把a中1对应的值更新为2还是3还是任意一条呢?
      

  6.   

    --请参考:
    ----Oracle 方法:   随机取一条记录:----
    SELECT * FROM (
       SELECT * FROM emp
        ORDER BY DBMS_RANDOM.VALUE
     )
    WHERE rownum<=1;
      

  7.   

    同#7在第一个b.col4 = '2'后面加 and rownum <= 1就可以了
      

  8.   

    update ORDER1 a 
    set (a.PID,a.PRESSNAME2) = (select b.PID,b.PRESSNAME from T_PRESS_POST b where a.PRESSCODE = b.PRESSCODE and rownum=1)
    where exists (select 1 from T_PRESS_POST b where a.PRESSCODE = b.PRESSCODE)