`

(转载)mysql通过关联修改表中两个字段的值

阅读更多

mysql通过关联修改表中两个字段的值

刚刚看到一道数据库的题,觉得挺有意思。

两张表:
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查询把多列返回结果集拼装成一个字段

    mysql中有种可以通过join相关操作进行表与表之间的方式查询不同结果集,但是在一对多的情况下,关键查询的结果是多条的.例如:班级和学习的关系,我想很直观的看到班级和学生的情况,列表显示出班级的信息和班级的男生...

    MySQL 多表关联一对多查询实现取最新一条数据的方法示例

    但是这两个字段却在订单表里面,每次客户下单都会要求客户填写;由此可知,客户数据和订单数据是一对多的关系;那这样的话,问题就来了,我到底以订单中的哪一条数据为准呢?经过协商后一致同意以最新的一条数据为准...

    mysql 从一个表中查数据并插入另一个表实现方法

    本文就将以MySQL数据库为例,介绍如何通过SQL命令行将某个表的所有数据或指定字段的数据,导入到目标表 中。此方法对于SQLServer数据库,也就是T-SQL来说,同样适用 。 类别一、 如果两张张表(导出表和目标表)的...

    MySQL 从一张表update字段到另外一张表中

    使用MySQL 4.0版或更高更新您可以通过加入两个或多个表一起一表;通过加入两个表连同您可以更新一个表的记录在相关领域的总部设在另一个表。

    MySQL中表子查询与关联子查询的基础学习教程

    MySQL 表子查询 表子查询是指子查询返回的结果集是 N 行 N ...该 SQL 的意义在于查找 article 表中指定的字段同时也存在于 blog 表中的所有的行(注意 = 比较操作符换成了 IN),实际上等同于下面的条件语句: SELECT

    MySQL中联表更新与删除的语法介绍

    相信大家在日常使用mysql,可能会遇到需要同时更新两张表时,我会采用在同一个事务中使用2句sql语句分别进行更新。其实,这种需要发送2句sql语句的方法效率相对来说是比较低的,有没有只用1句sql语句就可以完成这个...

    mysql关联两张表时的编码问题及解决办法

    Mysql关联两张表时,产生错误提示Illegal mix of collations 1、先用工具把数据库、两张表的编码方式改变 2、这步很重要,需要改变字段的编码方式。 ALTER TABLE `表名` CHANGE `dev_chancode` `字段` VARCHAR(32) ...

    mysql利用group_concat()合并多行数据到一行

    假设两个表a,b,b中通过字段id与a表关联,a表与b表为一对多的关系。假设b表中存在一字段name,现需要查询a表中的记录,同时获取存储在b表中的name信息,按照常规查询,b表中有多少记录,则会显示多少行,如果需要只...

    mysql实现多表关联统计(子查询统计)示例

    当关联超过两张表时导致统计时数据重复,只好用子查询查出来,子查询只能查一个字段,这里用CONCAT_WS函数将多个字段其拼接 实现: 查询代码如下 SELECT b.id, b.book_name, sum( IF ( o.create_time > 0 && o....

    mysql数据库的基本操作语法

    外键约束是保证一个或两个表之间的参照完整性,外键是构建于一个表的两个字段或是两个表的两个字段之间的参照关系。 也就是说从表的外键值必须在主表中能找到或者为空。 当主表的记录被从表参照时,主表的记录将不...

    在MySQL字段中使用逗号分隔符的方法分享

    被分割的字段一定是有限而且数量较少的,我们不可能在一个字符串中存储无限多个字符 这个字段所属的表与这个字段关联的表,一定是一对多的关系 比如下面这个表结构所代表的content与tag这两个对象 代码如下: mysql> ...

    【大厂面试题】史上最详细的一线大厂Mysql面试题详解及其答案MySQL执行计划及SQL优化

    子查询不一定需要两个表有关联字段,而连接查询必须有字段关联(所谓的主外键关系) 表关联的效率要高于子查询,因为子查询走的是笛卡尔积。 表关联可能有多条记录,子查询只有一条记录,如果需要唯一的列,最好使用...

    全国城市mysql数据库(含拼音)

    全国城市mysql数据库,是sql格式,直接导入到mysql数据库即可使用。...另外提示,这个中国城市数据库最好跟我上传的另外一个全国省份数据库一起使用,效果会更好,因为这两个数据库本身就是有关联的。

    全国省份mysql数据库(含拼音)

    全国省份mysql数据库,sql格式,直接导入到mysql数据库即可使用。...另外提示,这个中国省份数据库最好跟我上传的另外一个全国城市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创建外键关联错误 – errno:150

    当你试图在mysql中创建一个外键的时候,这个出错会经常发生,这是非常令人沮丧的。像这种不能创建一个.frm 文件的报错好像暗示着操作系统的文件的权限错误或者其它原因,但实际上,这些都不是...1, 两个字段的类型或者

    一款包含系统设计和代码生成功能的自动化web平台

    5. 多对多关系:支持在两个实体之间建立多对多关联关系,会在mysql中生成一张关联表,可以设置两个实体之间是否持有对方引用,持有引用的一方会自动生成维护关联关系的功能。 6. 外键关联:在添加字段的时候,可以...

    MYSQL 高级篇之数据库搜索引擎及原理

    针对上面创建的两个表, 子表的外键指定是ON DELETE RESTRICT ON UPDATE CASCADE 方式的, 那么在主表删除记录的时候, 如果子表有对应记录, 则不允许删除, 主表在更新记录的时候, 如果子表有对应记录, 则子表...

Global site tag (gtag.js) - Google Analytics