求教一条ORACLE UPDATE语句的写法假设ORACLE有两个表t1和t2
t1和t2的字段有p_id,user_name请问,怎样根据t1.p_id=t2.p_id,将t2的user_name更新到t1的user_name

解决方案 »

  1.   


    update t1 set user_name=(select user_name from t2 where t1.p_id=p_id and rownum=1) 
    where exists(select 1 from t2 where t1.p_id=p_id);
      

  2.   

    避免内层返回多条记录user_name,如果你t1、t2中p_id、user_name都是一一对应的,那么可以不加rownum=1
      

  3.   

    paddy考虑问题还是仔细啊 
    要是我就是这样了
    update t1 set user_name=(select user_name from t2 where t1.p_id=p_id) 
    where exists(select 1 from t2 where t1.p_id=p_id);--前几次连这个都没写
      

  4.   


    MERGE INTO t1
    USING t2 
    ON ( t1.p_id = t2.p_id)
    WHEN MATCHED THEN
    UPDATE SET
    t1.user_name = t2.user_name
      

  5.   

    --用Merge比较好,可以省去一个子查询
      

  6.   

    不好意思,我没用过MERGE,能解释一下吗?
      

  7.   


    MERGE INTO t1 --要更新的表
    USING t2 --数据来源表
    ON ( t1.p_id = t2.p_id) --根据t1.p_id=t2.p_id
    WHEN MATCHED THEN
        UPDATE SET
            t1.user_name = t2.user_name--将t2的user_name更新到t1的user_name不知道怎么解释,语文不级格人,唉。
      

  8.   

    用MERGE命令时,ORACLE提示无效的SQL语句
      

  9.   

    试试这样
    update(select t1.user_name t1_name,t2.user_name t2_name from t1,t2 where t1.p_id=t2.p_id)
    set t1_name=t2_name
      

  10.   

    你的版本低了 不然merge 首选