新手请教如何写一个oracle双重循环sql(50分)

老孙来也 2008-10-17 03:16:07
有两张表:
表a:
name(全名),no
表b:
name

其中 b表中的name 可能等于或者like a表中的name。

现在想把b.name全变换成对应的a.no。
应该如何编程呢??

看似简单,已经花了我半天时间了,头都昏了。

哪位大虾援手,必给50分!!
...全文
349 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
oracledbalgtu 2008-10-17
  • 打赏
  • 举报
回复
 
UPDATE B
SET B.NAME = (SELECT A.NO
FROM A
WHERE INSTR(B.NAME, A.NAME) > 0
AND ROWNUM = 1)
WHERE EXISTS (SELECT A.NO
FROM A
WHERE INSTR(B.NAME, A.NAME) > 0
AND ROWNUM = 1);
[Quote=引用楼主 sun_in_china 的帖子:]
有两张表:
表a:
name(全名),no
表b:
name

其中 b表中的name 可能等于或者like a表中的name。

现在想把b.name全变换成对应的a.no。
应该如何编程呢??

看似简单,已经花了我半天时间了,头都昏了。

哪位大虾援手,必给50分!!
[/Quote]
sjq521521 2008-10-17
  • 打赏
  • 举报
回复
顶下4楼
老孙来也 2008-10-17
  • 打赏
  • 举报
回复
先谢谢楼上的朋友。


我这里学习学习。(#-#)
mantisXF 2008-10-17
  • 打赏
  • 举报
回复
这个只是1对1的情况,如果1对多的情况就会有问题。这个信息还是要LZ来提供。[Quote=引用 7 楼 cosio 的回复:]
引用楼主 sun_in_china 的帖子:
有两张表:
表a:
name(全名),no
表b:
name

其中 b表中的name 可能等于或者like a表中的name。

现在想把b.name全变换成对应的a.no。
应该如何编程呢??

看似简单,已经花了我半天时间了,头都昏了。

哪位大虾援手,必给50分!!



SQL code

select id,name from d
1 张三
2 李四
3 王五

select name from e


王五



--s…
[/Quote]
cosio 2008-10-17
  • 打赏
  • 举报
回复
instr(d.name,e.name)>0 or instr(e.name,d.name)>0

少了一个条件!
cosio 2008-10-17
  • 打赏
  • 举报
回复
[Quote=引用楼主 sun_in_china 的帖子:]
有两张表:
表a:
name(全名),no
表b:
name

其中 b表中的name 可能等于或者like a表中的name。

现在想把b.name全变换成对应的a.no。
应该如何编程呢??

看似简单,已经花了我半天时间了,头都昏了。

哪位大虾援手,必给50分!!
[/Quote]



select id,name from d
1 张三
2 李四
3 王五

select name from e


王五



--sql:
select id,b,a
from
(select id,d.name b,e.name a,
(case when instr(d.name,e.name)>0 then id end ) nn
from d,e
)
where nn is not null

--result:
2 李四 李
1 张三 张
3 王五 王五
1 张三 三
2 李四 四




yuyu1980 2008-10-17
  • 打赏
  • 举报
回复
难啊
假如B中的NAME在A中有两个LIKE的记录取哪一个?是不是随便放一个 
要是的这样的话
update b set b.name=
(select a.no from a where b.name like a.name||'%' and rownum=1);
kukuxiaolang 2008-10-17
  • 打赏
  • 举报
回复
看你是有值就可以还是咋的了`````
范佩西_11 2008-10-17
  • 打赏
  • 举报
回复
这个是b.name包含或等于a.name
update b set b.name =(select a.no from a where instr(b.name,a.name)>0 );


如果是a.name包含或等于b.name
update b set b.name =(select a.no from a where instr(a.name,b.name)>0 );

如果是互相包含的可能
update b set b.name= (select a.no from a where instr(a.name,b.name)>0 or instr(b.name,a.name)>0) 
hyrongg 2008-10-17
  • 打赏
  • 举报
回复
晕哟,要是b的一个字段同时like A里面的两个,B里面怎么Update?

比如
A

'abcd',1
'bbcd',2


B
'bcd'


B Update成1还是2?


vc555 2008-10-17
  • 打赏
  • 举报
回复
关联条件是什么?
你举个例子,列出表中数据和你想要的查询结果。
wfqqwer5213 2008-10-17
  • 打赏
  • 举报
回复
update b set b.name=a.no where b.name like a.name and rownum=1;

17,140

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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