求教一个sql语句

现在有两个表:
A表中有两个字段xm(姓名汉字),xmpy(姓名的拼音码)
B表为一个拼音表,两个字段分别为:hz(汉字),dm(拼音码)
要求通过一个sql语句完成把A表xm字段的拼音码翻译出来,修改xmpy字段
[125 byte] By [which-which] at [2007-12-16]
# 1
一个sql恐怕难以办到。
想一下
jiezhi-风满袖 at 2007-10-23 > top of Msdn China Tech,Oracle,开发...
# 2
高手都睡着了吗
which-which at 2007-10-23 > top of Msdn China Tech,Oracle,开发...
# 3
SQL> select * from a2;

BBB CCC
---------- --------------------
开发者
SQL> select * from a4;

BBB CCC
---------- --------------------
开 kai
发 fa
者 zhe
SQL> update a2 set a2.ccc=(
2 select ccc1||ccc2||ccc3 from (
3 select a4.ccc ccc1 from a4,a2 where instr(a2.bbb,a4.bbb)=1),
4 (select a4.ccc ccc2 from a4,a2 where instr(a2.bbb,a4.bbb)=2),
5 (select a4.ccc ccc3 from a4,a2 where instr(a2.bbb,a4.bbb)=3))
6 where a2.bbb= '开发者';

已更新 1 行。
SQL> select * from a2;

BBB CCC
---------- --------------------
开发者 kaifazhe
bzszp-SongZip at 2007-10-23 > top of Msdn China Tech,Oracle,开发...
# 4
我是这样写的
update a set xm=(select b1.dm||b2.dm||b3.dm from b b1,b b2,b b3 where substr(xm,1,1)=b1.hz and substr(xm,2,1)=b2.hz and substr(xm,3,1)=b3.hz)
但是这样出现一个问题,就是在姓名为两个字时,因为子查询中的b3.dm返回null,所以返回的xm为空。
which-which at 2007-10-23 > top of Msdn China Tech,Oracle,开发...
# 5
写个过程很简单,何必追求一个sql,即使可以实现,也未必是最好的解决方案.
jlandzpa-jlandzpa at 2007-10-23 > top of Msdn China Tech,Oracle,开发...
# 6
which(which)的改一下就可以了
名字至少也要两个把,加个判断

update a set xm=(select b1.dm||b2.dm||decode(b3.dm,null,'',b3.dm) from b b1,b b2,b b3 where substr(xm,1,1)=b1.hz and substr(xm,2,1)=b2.hz and substr(xm,3,1)=b3.hz)
bzszp-SongZip at 2007-10-23 > top of Msdn China Tech,Oracle,开发...
# 7
which(which) :
你的办法就可以呀!
或者分批处理不同字数的名字,用NVL处理NULL也可以。
CHENGXB-阿困 at 2007-10-23 > top of Msdn China Tech,Oracle,开发...
# 8
高手到齐了吧,解决了吗?
zhangshunshi-宇轩 at 2007-10-23 > top of Msdn China Tech,Oracle,开发...
# 9
bzszp(SongZip) :还是不对啊
which-which at 2007-10-23 > top of Msdn China Tech,Oracle,开发...
# 10
任务是肯定能完成的,只是想讨论一下这种sql语法,其实主要是在子查询中如何再加上一个xm字段的长度的条件
which-which at 2007-10-23 > top of Msdn China Tech,Oracle,开发...
# 11
写一个函数,输入参数是一个字符串,返回输入串中所有汉字的拼音码。
bobfang-匆匆过客 at 2007-10-23 > top of Msdn China Tech,Oracle,开发...