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

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语句应如何写?
...全文
83 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
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
  • 打赏
  • 举报
回复
想不出什么办法,觉得你的逻辑没办法表达。除非用过程。

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧