有t1 和 t2 两个表,表中的数据和字段如下:
执行 如下SQL语句:
update tab1 set tab1.name=tab1.name+(select t2.name from tab2 t2 where t2.id=tab1.id)
执行完毕后,t1 结果如下:
1、 为什么?
答:1、update tab1 时,是全表更新,因为没有添加where过滤条件
2、update tab1时,id=3 的数据,计算的结果为NULL
所以name=NULL
2、如果不想改变 id=3 的数据 ,SQL该怎么写?
答:
update tab1 set tab1.name=tab1.name+(select t2.name from tab2 t2 where t2.id=tab1.id)
where tab1.id in(select id from tab2)
===========================================================================
测试语句:
1 create table tab1 2 ( 3 id int, 4 name varchar(200) 5 ); 6 create table tab2 7 ( 8 id int, 9 name varchar(200) 10 ); 11 insert into tab1 values(1,'name1_') 12 insert into tab1 values(2,'name2_') 13 insert into tab1 values(3,'name3_') 14 15 insert into tab2 values(1,'name1_') 16 insert into tab2 values(2,'name2_') 17 insert into tab2 values(4,'name4_') 18 19 20 select * from tab1; 21 select * from tab2; 22 23 delete from tab1; 24 delete from tab2; 25 26 update tab1 set tab1.name=tab1.name+(select t2.name from tab2 t2 where t2.id=tab1.id) 27 28 update tab1 set tab1.name=tab1.name+(select t2.name from tab2 t2 where t2.id=tab1.id) 29 where tab1.id in(select id from tab2)