where a.shj||ltrim(rtrim(a.chlhm)) in
(select b.shj||ltrim(rtrim(b.chlhm)) from jf_ls b) => (为了简化程序,用 trim() 替换 l,r 两个函数来分析)
where a.shj || trim(a.chlhm)
in (select b.shj || trim(b.chlhm) from jf_ls b)=>
where 0< (
select count(*)
from jf_ls
where (b.shj || trim(b.chlhm) = (a.shj || trim(a.chlhm))
)速度会快点,但看上去还是很复杂. :(
(select b.shj||ltrim(rtrim(b.chlhm)) from jf_ls b) => (为了简化程序,用 trim() 替换 l,r 两个函数来分析)
where a.shj || trim(a.chlhm)
in (select b.shj || trim(b.chlhm) from jf_ls b)=>
where 0< (
select count(*)
from jf_ls
where (b.shj || trim(b.chlhm) = (a.shj || trim(a.chlhm))
)速度会快点,但看上去还是很复杂. :(
解决方案 »
- 【请教】eclipse中Java jdbc连接Oracle数据库,为什么语句需要在表名前加上数据库的表空间名称?
- 急!!asp始终无法连上正常工作的ODBC的oracle数据源
- 跪求触发器问题
- 不同数据库之间的数据传输
- 在win98上安装oracle8i个人版后无法启动数据库
- 有人用过ODAC这套控件吗?
- 求求你救救我!!!!!!!~~~~~~~~~
- oracle能不能在windows2000 professional上建立数据库实例?
- Oracle时间问题
- 哪位讲讲oralce里怎么用实体视图吧。。material view
- 求助,一个关于连接oracle的问题,涉及到网络问题,请来看看,急!!!!
- 在solaris下装oracle8.1.5出现以下错误,请大家帮忙
a.shj||ltrim(rtrim(a.chlhm))=b.shj||ltrim(rtrim(b.chlhm)))
where exists
(
select 'X'
from jf_ls b
where b.shj||ltrim(rtrim(b.chlhm)) = a.shj||ltrim(rtrim(a.chlhm))
)
多谢回帖,我下午已经这样写了,跑起来似乎比 in 还要慢,为什么会这样我也不明白。
a.shj||ltrim(rtrim(a.chlhm))=b.shj||ltrim(rtrim(b.chlhm));
效果不是一样吗?因为已经关联一次了何必再用in呢?
也可以考虑建立索引,如果你update的行数不超过1/3建立索引很有效的
update jf_all a set wl=(select wl from jf_ls b) where
a.shj||a.chlhm=b.shj||b.chlhm ;
这样写跑不通啊!
--应该在加上trim然后试一下
update jf_all a set wl=(select wl from jf_ls b where a.shj||trim(a.chlhm)=b.shj||trim(b.chlhm));
/**后面一个where可以不用,试一下*/
/*测试结果
4 rows updated
Executed in 0 seconds 我用PL-SQL可以跑*/
同意 牧师厉害 , 不同意 jackjingsg(飞翔的精灵):****************************************************************************
update jf_all a set wl=(select wl from jf_ls b where a.shj||trim(a.chlhm)=b.shj||trim(b.chlhm));
/**后面一个where可以不用,试一下*/
*****************************************************************************
试吧!试了你就知道什么是后悔了!
写成a.shj=b.shj and a.chlhm=b.chlhm
这样oracle可以使用索引了
提供一点思路,也许不适合你现在的情况
尽量使用索引,尽量避免在等式的左边使用表达式