刚刚看到一道数据库的题,觉得挺有意思。
两张表:
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;
这个试了下,很好用。
当学习了。就是不知道有没有更好的方法。