SQL  UPDATE 的问题
本帖最后由 yilin54 于 2013-01-18 15:14:12 编辑
            有学生表 和智力表,把智力表中的智力值更新到学生表中。
 
1:update set 智商值 =(select 智商值 from 智力表 where 智力表.姓名 = 学生表.姓名) where  学生表.省份='浙江' 
2:update set 智商值 =(select 智商值 from 智力表 where 智力表.姓名 = 学生表.姓名 and 学生表.省份='浙江')  
请问 这两句的执行结果应该一样的吧? 效率也是一样吗?
              
              
------解决方案-------------------- 1、这个你自己备份一个表然后测试一下就知道了。
2、我喜欢这样写,你那个写法太混乱了,好像还有错:
UPDATE b   
set b.智商值 =a.智力值 
FROM 智力表 a INNER JOIN 学生表  b ON a.姓名=b.姓名 AND b.省份='浙江' ------解决方案-------------------- 可以用事务执行以下,看看效果就知道了,效果应该是一样的
 
begin tran 
update 学生表 set 智商值 =(select 智商值 from 智力表 where 智力表.姓名 = 学生表.姓名) where  学生表.省份='浙江' 
 
select * from 学生表 where 省份='浙江' 
rollback 
 
begin tran 
update 学生表 set 智商值 =(select 智商值 from 智力表 where 智力表.姓名 = 学生表.姓名 and 学生表.省份='浙江')  
 
select * from 学生表 where 省份='浙江' 
rollback 
--如果确认没问题可以用commit提交 
还有一点,关联最好要用学号,不要用姓名,如果有重名的学生,你的语句就要报错了
------解决方案-------------------- 问题在表关联的方式,你可以三个的执行计划对比一下,看百分比最高的部分在哪里
------解决方案-------------------- Quote: 引用:  
引用: 
1、这个你自己备份一个表然后测试一下就知道了。 
2、我喜欢这样写,你那个写法太混乱了,好像还有错: 
 
 
SQL code 
? 
 
 
 
123 
 
UPDATE b   set b.智商值 =a.智力值 FROM 智力表 a INNER JOIN 学生表  b ON a.姓名=b.姓名 AND b.省份='浙江' 
试了下,,你这个……[/qu当然是时间问题了,你的第二个用的是两张表相互穿插关联,学生表(智力表)的数据太多,导致时间过长;第一个只是在学生表中进行关联,不涉及智力表,时间复杂度降低,所以时间要快的多;而#1的写法用到了存储过程,效率大大的提高