刚刚看到一道数据库的题,觉得挺有意思。
两张表:
A:id,age,column1,column2
B:id,age,column1,column2
A.id 与 B.id关联。
将B中age>40的column1,column2更新到A的相应记录中,只能写一个语句。
写出mysql版本。
?
下面是测试用的脚本:
SQL语句:
create table A (??
??? id????? varchar(1),??
??? column1 varchar(1),??
??? column2 varchar(1),
??? age???? int????
)??
?
create table B (??
??? id????? varchar(1),??
??? column1 varchar(1),??
??? column2 varchar(1),??
??? age???? int?
)?
insert into A(id, column1, column2, age) values ('1', '1', '1', 20);??
insert into A(id, column1, column2, age) values ('1', '1', '1', 21);??
insert into A(id, column1, column2, age) values ('2', '2', '2', 22);??
insert into A(id, column1, column2, age) values ('3', '3', '3', 23);??
insert into B(id, column1, column2, age) values ('1', 'X', 'X', 41);??
insert into B(id, column1, column2, age) values ('2', 'X', 'X', 21);??
insert into B(id, column1, column2, age) values ('3', 'X', 'X', 51);??
insert into B(id, column1, column2, age) values ('3', 'Y', 'Y', 51);?
做完这些操作以后,就要考虑怎么实现了。
开始时候的想法是,
update a
set a.column1 = (select b.column1 from a, b where b.age > 40 and a.id = b.id),
column2 = (select b.column2 from a, b where b.age > 40 and a.id = b.id);
实际上,这样是不好使的。
Error Code : 1093
You can't specify target table 'a' for update in FROM clause
意思是,要修改的表,就不能在后面子查询语句中使用。
?
所以得用其他的方法。
update a inner join b on a.id=b.id??
set A.column1 =b.column1,a.column2=b.column2??
where b.age>40;
这个试了下,很好用。
?
当学习了。就是不知道有没有更好的方法。