novemberrain 发表于 2007-05-22 11:18

请教:update的两个问题

描述: 两张表:t1(字段:a,b,c,d),t2(字段:a,b,c),字段均为char型,两表的主键均为: a, b组成的联合主键。现在,t2表c字段的值发生了变化,需要用t2表各记录的c字段更新t1表中相应记录的c字段。
我的sql为:
update t1
set c= ( select t2.c from t2 where t2.a=t1.a and t2.b=t1.b )
where t1.a || t1.b in
( select t2.a || t2.b
    from t2
    where t2.a=t1.a
          and t2.b=t1.b
)

问题:
1.目前的sql语句从逻辑上讲是对的,但是感觉不够优化,且在大数据量的情况下执行时效率非常低,请各位帮忙,看看该sql是否能有更好的写法或其他的实现方式;
2.相同的数据量,该update语句在informix9.4上比informix 7.31上明显慢(硬件、informix参数基本相同,只是操作系统一个为linux另一个为sco 5.0.6),有达人知道原因吗?

novemberrain 发表于 2007-05-23 14:21

目前还没人回答,自己再顶一下

kajue 发表于 2007-05-24 21:19

have a try

update t1
set c= ( select t2.c from t2 where t2.a=t1.a and t2.b=t1.b )
where exists (select 1 from t2 where t2.a=t1.a and t2.b=t1.b)
页: [1]
查看完整版本: 请教:update的两个问题