|
原帖由 ZALBB 于 2008-4-12 11:57 发表 ![]()
有区别,
第1条语句,只修改tmp_ours表中符合条件:tmp_ours.servnumber=tmp_kaifas.servnumber 的纪录.
而第2条语句,修改整个tmp_ours表.
比方:tmp_ours表有400万条纪录,符合tmp_ours.servnumber=tmp_kaifas.servnumber条件的只有3条,
那第1条语句只修改3条数据,而第2条则每次都修改400万条.显然,两语句的效率不可同日而语.
此外:第1条语句执行后,被修改的3条纪录的subsid=b.servnumber,除此之外,别的纪录没变.
而第2条语句,除了被修改的3条纪录的subsid=b.servnumber外,别的纪录的subsid=NULL.
因为关联时,没有匹配的纪录,只能返回空值.
总结这类UPDATE语句:
update tmp_ours a
2 set a.subsid=(select b.servnumber from tmp_kaifas b where a.servnumber=b.servnumber)
3 where exists
4 ( select 1 from tmp_kaifas b where a.servnumber=b.servnumber );
1 外围的where exists约束条件 ,表达的是主表tmp_ours 要修改的纪录.
2 里面的 where a.servnumber=b.servnumber,则说明如何找到匹配的纪录,来返回数值给被修改的字段a.subsid.
老妖说的很对。
如果条件特殊,你执行这两个语句,结果是不同的。 |
|