刚刚看到一道数据库的题,觉得挺有意思。
两张表:
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;
这个试了下,很好用。
当学习了。就是不知道有没有更好的方法。
相关推荐
mysql中有种可以通过join相关操作进行表与表之间的方式查询不同结果集,但是在一对多的情况下,关键查询的结果是多条的.例如:班级和学习的关系,我想很直观的看到班级和学生的情况,列表显示出班级的信息和班级的男生...
但是这两个字段却在订单表里面,每次客户下单都会要求客户填写;由此可知,客户数据和订单数据是一对多的关系;那这样的话,问题就来了,我到底以订单中的哪一条数据为准呢?经过协商后一致同意以最新的一条数据为准...
本文就将以MySQL数据库为例,介绍如何通过SQL命令行将某个表的所有数据或指定字段的数据,导入到目标表 中。此方法对于SQLServer数据库,也就是T-SQL来说,同样适用 。 类别一、 如果两张张表(导出表和目标表)的...
使用MySQL 4.0版或更高更新您可以通过加入两个或多个表一起一表;通过加入两个表连同您可以更新一个表的记录在相关领域的总部设在另一个表。
MySQL 表子查询 表子查询是指子查询返回的结果集是 N 行 N ...该 SQL 的意义在于查找 article 表中指定的字段同时也存在于 blog 表中的所有的行(注意 = 比较操作符换成了 IN),实际上等同于下面的条件语句: SELECT
相信大家在日常使用mysql,可能会遇到需要同时更新两张表时,我会采用在同一个事务中使用2句sql语句分别进行更新。其实,这种需要发送2句sql语句的方法效率相对来说是比较低的,有没有只用1句sql语句就可以完成这个...
Mysql关联两张表时,产生错误提示Illegal mix of collations 1、先用工具把数据库、两张表的编码方式改变 2、这步很重要,需要改变字段的编码方式。 ALTER TABLE `表名` CHANGE `dev_chancode` `字段` VARCHAR(32) ...
假设两个表a,b,b中通过字段id与a表关联,a表与b表为一对多的关系。假设b表中存在一字段name,现需要查询a表中的记录,同时获取存储在b表中的name信息,按照常规查询,b表中有多少记录,则会显示多少行,如果需要只...
当关联超过两张表时导致统计时数据重复,只好用子查询查出来,子查询只能查一个字段,这里用CONCAT_WS函数将多个字段其拼接 实现: 查询代码如下 SELECT b.id, b.book_name, sum( IF ( o.create_time > 0 && o....
外键约束是保证一个或两个表之间的参照完整性,外键是构建于一个表的两个字段或是两个表的两个字段之间的参照关系。 也就是说从表的外键值必须在主表中能找到或者为空。 当主表的记录被从表参照时,主表的记录将不...
被分割的字段一定是有限而且数量较少的,我们不可能在一个字符串中存储无限多个字符 这个字段所属的表与这个字段关联的表,一定是一对多的关系 比如下面这个表结构所代表的content与tag这两个对象 代码如下: mysql> ...
子查询不一定需要两个表有关联字段,而连接查询必须有字段关联(所谓的主外键关系) 表关联的效率要高于子查询,因为子查询走的是笛卡尔积。 表关联可能有多条记录,子查询只有一条记录,如果需要唯一的列,最好使用...
全国城市mysql数据库,是sql格式,直接导入到mysql数据库即可使用。...另外提示,这个中国城市数据库最好跟我上传的另外一个全国省份数据库一起使用,效果会更好,因为这两个数据库本身就是有关联的。
全国省份mysql数据库,sql格式,直接导入到mysql数据库即可使用。...另外提示,这个中国省份数据库最好跟我上传的另外一个全国城市mysql数据库一起使用,效果会更好,因为这两个数据库本身就是有关联的。
在 MySQL 3.23 中,如果表达式的右边是一个日期值或一个日期时间型字段,你可以使用 + 和 - 代替 DATE_ADD() 和 DATE_SUB()(示例如下)。 参数 date 是一个 DATETIME 或 DATE 值,指定一个日期的...
其中B表插入数据的字段需要同A表中的字段相对应。 代码如下: CREATE TRIGGER 触发器名称 ON A表 AFTER INSERT AS BEGIN INSERT INTO B表(B表字段1,B表字段2,B表字段3) SELECT A表字段1,A表字段2,A表字段3 FROM ...
当你试图在mysql中创建一个外键的时候,这个出错会经常发生,这是非常令人沮丧的。像这种不能创建一个.frm 文件的报错好像暗示着操作系统的文件的权限错误或者其它原因,但实际上,这些都不是...1, 两个字段的类型或者
5. 多对多关系:支持在两个实体之间建立多对多关联关系,会在mysql中生成一张关联表,可以设置两个实体之间是否持有对方引用,持有引用的一方会自动生成维护关联关系的功能。 6. 外键关联:在添加字段的时候,可以...
针对上面创建的两个表, 子表的外键指定是ON DELETE RESTRICT ON UPDATE CASCADE 方式的, 那么在主表删除记录的时候, 如果子表有对应记录, 则不允许删除, 主表在更新记录的时候, 如果子表有对应记录, 则子表...