update t3 set f3=(select b.f3 from t1 a,t2 b where a.f2=b.f2);
这样好象不行啊,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中仓库编号的值,而货物编号是要求对应的!!!不知这样描述是否清楚!?多谢了!!!
UPDATE t3 SET f3=(select b.f3 from t1 a,t2 b where a.f2=b.f2 and a.f1=某个具体值) WHERE f1 =要更新的货物编号
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;
应该是这样吧: update t3 set t3.f3 = (select t2.f3 from t1, t2 where t1.f2=t2.f2 and t3.f1 = t1.f1) ======================================================================================
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)
SET f3=(select b.f3 from t1 a,t2 b where a.f2=b.f2 and a.f1=某个具体值)
WHERE f1 =要更新的货物编号
where t.f1=t3.f1中t.f1是无效的列名
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; ?
我把楼主的意思分步理解了一下,还是不明。。
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; ?
update t3 set t3.f3 = (select t2.f3 from t1, t2 where t1.f2=t2.f2 and t3.f1 = t1.f1)
where...
不明白楼主到底要做什么???
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 :)
======================================================================================
回复人: 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)
======================================================================================
(select t1.goodsno,t2.wno from t1,t2 where t1.addr=t2.addr) b
where a.goodsno=b.goodsno)