刚刚看到一道数据库的题,觉得挺有意思。
两张表:
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数据库操作中,有时我们需要将一个表中的字段值更新为另一个表中相应字段的值。这在数据同步、数据修复或数据整合等场景中非常常见。本篇将详细讲解如何实现这一操作,并通过实例来具体说明。 首先,我们要...
但是这两个字段却在订单表里面,每次客户下单都会要求客户填写;由此可知,客户数据和订单数据是一对多的关系;那这样的话,问题就来了,我到底以订单中的哪一条数据为准呢?经过协商后一致同意以最新的一条数据为准...
在MySQL数据库中,有时我们需要将一个表中的某个字段的数据复制到另一个表的相应字段中,以满足特定的数据迁移或同步需求。以下是一些常见的SQL语句写法来实现这一目标。 1. **LEFT OUTER JOIN** 方法: ```sql ...
MySQL关联查询是数据库操作中的重要概念,用于在多个表之间建立连接,以便从不同表中检索相关数据。关联查询能够让我们在单个SQL语句中处理来自多个表的数据,极大地提高了数据查询的效率和灵活性。这里我们将深入...
最后,外键是表中用于建立和加强两个表数据链接的一列或多列。外键用于在两个表的列之间建立链接,保证数据的一致性、完整性和引用的完整性。外键的设置要求父表中的外键列必须是键,通常是一个主键或唯一键。在本...
这里涉及了两个表`a`和`b`,同时更新`a`表的`title`和`name`字段,根据`id`字段的匹配值从`b`表中获取。 **Solution 3: 使用子查询更新** ```sql UPDATE student s SET city_name = (SELECT name FROM city WHERE ...
这些更新操作依赖于两个表之间的关联,即`TEMPLATE_CODE`字段在两个表中具有相同的含义。`UPDATE`语句的这种用法允许我们在不使用子查询的情况下进行多表更新,提高了效率。 在数据库设计和优化方面,我们需要注意...
在统计过程中,可能会遇到一个问题:当关联多于两张表时,数据可能会出现重复。为了解决这个问题,我们可以使用子查询来获取特定字段的信息,而不是直接在主查询中进行多表关联。在示例中,子查询用于获取总打赏分数...
首先,我们需要理解`useGeneratedKeys`和`keyProperty`这两个MyBatis的配置属性。`useGeneratedKeys="true"`指示MyBatis使用数据库生成的主键值。这通常适用于那些设置为自动增长的字段,比如MySQL中的`AUTO_...
在数据库设计中,表约束和表关系是两个关键的概念,特别是在使用MySQL这样的关系型数据库管理系统时。本节主要探讨了MySQL中的表约束和不同类型的表关系。 首先,表约束是确保数据完整性和准确性的规则。MySQL支持...
在MySQL中,两表关联的连接表创建索引是一个关键的操作,这直接影响到查询性能。本文将详细讨论如何为这样的连接表设计合适的索引,以及通过实际测试验证不同索引策略的效果。 首先,我们考虑一个典型的多表关联...
- **使用组合索引或覆盖索引**:组合索引可以同时支持多个字段的查询需求,覆盖索引则可以避免额外的数据访问,从而提高查询性能。 #### 存储过程的使用 - **缓存执行计划**:存储过程的执行计划会被缓存在内存中...
在MySQL数据库中,多表关联查询是数据分析师和开发人员常用的一种高级技能,它能够从多个相关联的数据表中提取并合并所需的信息。这使得我们可以处理复杂的数据需求,获取更全面、更精确的分析结果。以下是对四种...
由于`a`和`b`表中可能存在相同的`name`字段,我们使用`as`关键字来重命名`a`表中的`name`字段为`aname`,`b`表中的`name`字段为`uname`,这样在结果集中就可以明确区分这两个字段的来源。 4. `join('b on b.jb_id=a....
在这个例子中,我们得到了电影标题和`film_id`,其中`film_id`只出现了一次,这是因为使用了`USING`关键字,确保了两个表中的`film_id`字段必须一致。 通过以上对比分析,可以看出不同的关联查询方式各有优缺点,...
在MySQL数据库操作中,涉及到多表关联查询时,可能会遇到编码问题,这通常表现为“Illegal mix of collations”错误。这个错误是由于不同表或字段之间使用的字符集和排序规则不一致导致的。解决这个问题需要对数据库...
例如,`INNER JOIN`、`LEFT JOIN`、`RIGHT JOIN`和`FULL OUTER JOIN`可以将两个或更多表的数据合并在一起,根据指定的关联条件。 6. 分组和聚合函数:GROUP BY语句用于将数据按指定字段进行分组,而聚合函数(如...
INNER JOIN仅返回两个表中匹配的记录,而LEFT JOIN、RIGHT JOIN和FULL JOIN分别返回左表、右表以及两个表中所有的记录,即使某些记录在另一表中没有匹配的记录也会返回。 接下来,关于DBA不让使用Join的问题,其...
MySQL中的表子查询和关联子查询是SQL查询中两种重要的技术,它们在处理复杂的数据查询时发挥着关键作用。本文将深入探讨这两种子查询的概念、用法和优化策略。 首先,我们来看表子查询。表子查询指的是在一个查询中...