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

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语句应如何写?
...全文
95 5 打赏 收藏 转发到动态 举报
写回复
用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
  • 打赏
  • 举报
回复
想不出什么办法,觉得你的逻辑没办法表达。除非用过程。
问:我正在 NT 上运行 DB2 V7 的黄金代码。我以为联合 DB 支持就意味着我可以连接不同 DB2 数据库中的两个表。 我尝试执行该操作,但没有成功。当我试图创建服务器时,我遇到了各种各样的语法错误。有人这样连接成功了吗 答:是的,这是可以支持的。如果您没有成功,我建议您查看 Admin Guide 中略述的有关联合数据库支持的步骤。然而,我通过使用控制中心来定义必要的别名等。您可能已经这样做了,而此时特定的 SQL 可能让人头疼。这就需要 FDB 开发者进行分析。对于 V7 中的 FDB,SQL 限于只读操作。 问: 顾客在 LDAP 服务器上定义了大量用户。DB2 可以用 LDAP 服务器来认证这些用户吗 答: LDAP 用于 DB2 中只是为了共享编目目录(即数据库和节点)。对于认证支持,我们只关注 Kerberos。 问: DB2 版本 7.1 中“技术预览”部分的介绍中曾经提到过增量备份可是在发行的G.A. 代码或命令参考手册中都没有此特性。是不是该特性推迟发行了?什么时候才可能用上?(下一发行版?补丁程序包?九月份?) 答: 在 DB2 V 7.1 未来的补丁程序包中将可用增量备份。 问:当我试图将我的 DB2 v5 数据库恢复至具有 DB2 v7.1 的新服务器时,得到以下消息。 (4)RalIds1E C:\\db2 restore db cqmsloc1 from m:\db20616 在备份映像中指示的 SQL2548N 数据库代码页“850”同当前磁盘上所指示数据库代码页“437”有所不同。恢复操作失败。 我试图切换 config.sys 为 850,437,但是却无济于事。 劳驾哪位帮忙解决这个问题。 答:我有两种克服该困难的办法,1. 在新机器上安装旧版本,先恢复,然后更新至新版本。 2. 创建一个同名数据库,设置欲设的代码页,然后进行恢复。 问: 客户要从 Oracle 移植到 DB2 UDB,而待移植项目之一就是序列 ID。但是,他们却发现 DB2 UDBV7 中的序列 ID 是在行插入时内部生成的,于是想要知道如何获得所插入行的 ID,以在其应用程序中显示。如果他们需要基于另一个唯一标识符来查询序列 ID 域,这看起来似乎就违背了序列号的用途,并且也增大了从 Oracle 移植的难度。对于插入到 V7 中的一行来说,检索其序列 ID 的方法是什么呢?谢谢。 答:在 V7.1 中提供了一个新函数 IDENTITY_VAL_LOCAL(),它允许应用程序检索插入的 ID 值。这在发行说明中有文档记录。 问: 我已经在 Win98 中安装了 DB2 PE/RC。Oracle NET8 和 SQL*PLUS 也已经安装。我可以针对 Oracle 使用别名。请问是否支持这种配置? 答: 不应该这样。声明信中说得清清楚楚: “下列产品需要一套经许可的 DB2 EE 或 EEE 的副本”

34,873

社区成员

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

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