导航
  • 主页
  • 基础类
  • 应用实例
  • 新技术前沿

关于联合查询更新的头疼问题...

gum 2001-10-20 10:33:59
Oracle:
Create table A(A1 char(2));
Create table B(B1 char(2), B2 char(2));

现数据:
A: 11
22
B: 33 null
55 null

动作:
Update B set B2=(select Min(A1) from A where A.A1<B.B1);

结果:
A: 11
22
B: 33 11
55 11
-----------------
但我希望表A中每条记录只在表B中被采用一次.
A: 11
22
B: 33 11
55 22

A: 11
22
B: 33 22
55 11
上面的update语句应如何写?
...全文
53 点赞 收藏 5
写回复
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
KingSunSha 2001-10-20
declare
cursor c_b is select b1 from b;
tmp_b1 b.b1%type;
begin
update b set b2 = null; --ÖÿÕb2
open c_b;
loop
fetch c_b into tmp_b1;
if c_b%notfound then
exit;
end if;

update b
set b2=(select min(a1)
from a
where a1 < b1
and a1 not in (select distinct b2 --²»°üÀ¨ÒÑÓеÄb2
from b
where b2 is not null))
where b1 = tmp_b1;

end loop;
close c_b;
end;

运行结果:
SQL> select * from b;

B1 B2
-- --
33 11
55 22
回复
icevi 2001-10-20
不明白到底要做什么?
若A表中有两条记录,B表中有三条记录,你想怎么更新?这样肯定会有重复的,重复的规律是什么?

这两个表没有关系吗?

只提一个想法:将A表中加一个行号,B表也加一个行号,行号相等的更新,应该可以解决。
不会写ORACLE 的SQL,你自己想想怎么写吧。

回复
gum 2001-10-20
有什么变通的办法也行啊,帮帮忙吧...
回复
WQ7X 2001-10-20
你这条语句的执行结果,是让B表中的所有B2用MIN(A1)来更换,
语句本身就有问题。
回复
KingSunSha 2001-10-20
想不出什么办法,觉得你的逻辑没办法表达。除非用过程。
回复
发动态
发帖子
MS-SQL Server
创建于2007-09-28

3.2w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
社区公告
暂无公告