update t3 set t3 = (select f1 from t1, t2 where t1.f2 = t2.f2);

解决方案 »

  1.   

    update t3 set f3=(select b.f3 from t1 a,t2 b where a.f2=b.f2);
      

  2.   

    这样好象不行啊,select b.f3 from t1 a,t2 b where a.f2=b.f2是以f2为约束选择出来的结果,可能有多个。并且f3的值是以f1为约束的,不能随便赋值!!!约束条件可以这样描述,假设f1为货物编号,f3为仓库编号,f2为仓库地址,现在有货物编号-仓库地址的表格t1,仓库编号-仓库地址的表格t2,货物编号-仓库编号的表格t3,t1和t2的数据都是全的,要求根据t1中仓库的地址,从t2中找到相应的仓库编号,再来更新t3中仓库编号的值,而货物编号是要求对应的!!!不知这样描述是否清楚!?多谢了!!!
      

  3.   

    UPDATE t3
    SET f3=(select b.f3 from t1 a,t2 b where a.f2=b.f2 and a.f1=某个具体值)
    WHERE f1 =要更新的货物编号
      

  4.   

    update t3 set f3=(select t.f3 from (select t1.f1,t1.f2,t2.f3 f3 from t1,t2 where t1.f2=t2.f2) t) where t.f1=t3.f1;
      

  5.   

    biliky, 好象还是不行, 提示
    where t.f1=t3.f1中t.f1是无效的列名
      

  6.   

    我把楼主的意思分步理解了一下,还是不明。。
    t1
    货物编号goodsno 仓库地址addrt2
    仓库编号wno     仓库地址addrt3
    货物编号goodsno 仓库编号wno1、t1和t2的数据都是全的,
    2、要求根据t1中仓库的地址,从t2中找到相应的仓库编号,
    3、再来更新t3中仓库编号的值,而货物编号是要求对应的!!!
    ===========================
    SQL> select *  from t1;   GOODSNO ADDR
    ---------- --------
             1 杭州
             1 广州SQL> select * from t2;       WNO ADDR
    ---------- --------
            10 杭州
            11 北京
            12 广州
            
    SQL> select * from t3;   GOODSNO        WNO
    ---------- ----------
             1        我的分析
    2、要求根据t1中仓库的地址,从t2中找到相应的仓库编号,
    =========================
    这一步可以实现,如下         
    SQL> select t1.goodsno,t2.wno from t1,t2 where t1.addr=t2.addr;   GOODSNO        WNO
    ---------- ----------
             1         10
             1         12这时候货物编号都为1,但是有两个仓库编号,我怎么去update t3?
    ========================================================
    3、再来更新t3中仓库编号的值,而货物编号是要求对应的!!!
    ========================================================
    是不是根据上面的查询结果去更新t3,
    就是比如update t3 set wno=10 where goodsno=1; ?
      

  7.   

    刚才写错了,应该如下所示:
    我把楼主的意思分步理解了一下,还是不明。。
    t1
    货物编号goodsno 仓库地址addrt2
    仓库编号wno     仓库地址addrt3
    货物编号goodsno 仓库编号wno1、t1和t2的数据都是全的,
    2、要求根据t1中仓库的地址,从t2中找到相应的仓库编号,
    3、再来更新t3中仓库编号的值,而货物编号是要求对应的!!!
    ===========================
    SQL> select *  from t1;   GOODSNO ADDR
    ---------- --------
             1 杭州
             2 广州SQL> select * from t2;       WNO ADDR
    ---------- --------
            10 杭州
            11 北京
            12 广州
            13 广州        
            
    SQL> select * from t3;   GOODSNO        WNO
    ---------- ----------
             1        我的分析
    2、要求根据t1中仓库的地址,从t2中找到相应的仓库编号,
    =========================
    这一步可以实现,如下         
    SQL> select t1.goodsno,t2.wno from t1,t2 where t1.addr=t2.addr;   GOODSNO        WNO
    ---------- ----------
             1         10
             2         12
             2         13这时候货物编号都为2,但是有两个仓库编号,我怎么去update t3?
    ========================================================
    3、再来更新t3中仓库编号的值,而货物编号是要求对应的!!!
    ========================================================
    是不是根据上面的查询结果去更新t3,
    就是比如update t3 set wno=12 where goodsno=2; ?
      

  8.   

    应该是这样吧:
    update t3 set t3.f3 = (select t2.f3 from t1, t2 where t1.f2=t2.f2 and t3.f1 = t1.f1)
      

  9.   

    iouczp() update t3 set t3.f3 = (select t2.f3 from t1, t2 where t1.f2=t2.f2 and t3.f1 = t1.f1)
    where...
    不明白楼主到底要做什么???
      

  10.   

    ATGC的分析是正确的,
    SQL> select t1.goodsno,t2.wno from t1,t2 where t1.addr=t2.addr;   GOODSNO        WNO
    ---------- ----------
             1         10
             2         12
             2         13
    是可以找到这些。我想实现的功能就是根据t3中已有的GOODSNO来更新其对应的WHO,例如
    SQL> select * from t3;   GOODSNO        WNO
    ---------- ----------
             1        
    应该更新为
       GOODSNO        WNO
    ---------- ----------
             1        10 另忘了说明的是,t2中的WNO-ADDR是唯一对应的,即不存在一个地址对应多个WNO :)
      

  11.   

    OK,可以了,如iouczp所说,可能是我想得太复杂了吧:) 多谢了。来者有分!
    ======================================================================================
    回复人: iouczp() ( ) 信誉:100  2004-10-24 21:33:00  得分: 0  
     
     
       应该是这样吧:
    update t3 set t3.f3 = (select t2.f3 from t1, t2 where t1.f2=t2.f2 and t3.f1 = t1.f1)
    ======================================================================================  
     
      

  12.   

    update t3 a set a.wno=(select b.wno from
    (select t1.goodsno,t2.wno from t1,t2 where t1.addr=t2.addr) b
    where a.goodsno=b.goodsno)