首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

无法在FROM子句中指定用于更新的目标表- Mysql 5.7.10 - derived_merge不工作

问题描述: 无法在FROM子句中指定用于更新的目标表- Mysql 5.7.10 - derived_merge不工作

回答: 在MySQL 5.7.10版本中,无法在FROM子句中指定用于更新的目标表,这是由于MySQL的语法限制所导致的。在此版本中,derived_merge优化器不起作用,因此无法使用这种方式进行更新操作。

解决方法: 要解决这个问题,可以使用子查询来实现更新操作。可以将需要更新的数据查询出来,然后将查询结果作为子查询,再进行更新操作。

示例代码如下:

代码语言:txt
复制
UPDATE table_name
SET column_name = new_value
WHERE primary_key_column IN (SELECT primary_key_column FROM (SELECT * FROM table_name) AS subquery);

其中,table_name是需要更新的表名,column_name是需要更新的列名,new_value是新的值,primary_key_column是主键列名。

应用场景: 这种情况通常发生在需要更新的目标表与子查询中的表有关联关系时。通过使用子查询来更新数据,可以绕过MySQL 5.7.10版本中的语法限制,实现更新操作。

推荐的腾讯云相关产品: 腾讯云提供了多种云计算产品,可以满足各种需求。以下是一些相关产品的介绍:

  1. 云数据库MySQL: 腾讯云的云数据库MySQL是一种高性能、可扩展的关系型数据库服务。它提供了稳定可靠的数据库服务,支持自动备份、容灾、监控等功能,适用于各种规模的应用场景。了解更多:云数据库MySQL
  2. 云服务器CVM: 腾讯云的云服务器CVM是一种弹性计算服务,提供了可靠的计算能力和内存资源。它支持多种操作系统和应用程序,适用于各种开发和部署需求。了解更多:云服务器CVM
  3. 云函数SCF: 腾讯云的云函数SCF是一种无服务器计算服务,可以帮助开发者更轻松地构建和运行应用程序。它支持多种编程语言和触发器类型,提供了灵活的扩展能力和高可用性。了解更多:云函数SCF

以上是一些腾讯云的相关产品,可以根据具体需求选择合适的产品来解决问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

MySQL对derived table的优化处理与使用限制

这里我把它翻译成派生表,简单来讲,就是将from 子句中出现的检索结果集当做一张表,比如from 一个select构造的子查询,这个子查询就是一个派生表,from 一个视图,这个视图就是一个派生表,from...5.UNION 或union all,这种情况不会发生合并,在MySQL8.0.29版本之后条件会下推。...5.派生表作为外连接的内层表(比如left join的右表),条件无法推入到派生表,因为条件推入后,语句含义就变了。...6.从MySQL8.0.28版本开始,派生表的select 列表中包含分配的用户变量,条件不能推入派生表。...(1)外层查询中没有分组或聚合运算 (2)外层查询没有指定distinct,having 或order by。 (3)外层查询中只有这个派生表作为from子句的唯一源。

56211

看完这篇文章,99%的人都会使用Mysql Explain工具

查询不包含子查询和union primary:复杂查询中最外层的 select subquery:包含在 select 中的子查询(不在 from 子句中) derived:包含在 from 子句中的子查询...MySQL会将结果存放在一个临时表中,也称为派生表(derived的英文含义) union:在 union 中的第二个和随后的所有select 下面这个例子主要来了解(simple)查询类型 EXPLAIN...关于下图中,给出优化的sql,显示查询的是dual表,这个是mysql的自带的空表,像我们上面的sql,mysql会直接将数据解析到空表中,查询返回出去,所以效率才会高 ?...6.key列 这一列显示mysql实际采用哪个索引来优化对该表的访问。 7.key_len列 这一列显示了mysql在索引里使用的字节数,通过这个值可以算出具体使用了索引中的哪些列。...8.ref列 这一列显示了在key列记录的索引中,表查找值所用到的列或常量 9.rows列 这一列是mysql估计要读取并检测的行数,注意这个不是结果集里的行数。

55210
  • mysql optimizer_switch : 查询优化器优化策略深入解析

    不允许在值中多次指定任何给定的opt_name,这会导致错误。该值中的任何错误都会导致赋值失败,并导致optimizer_switch的值保持不变。...derived_merge 当查询中包含派生表(由子查询生成的临时表)时,derived_merge 标志控制是否尝试将这些派生表合并到外部查询中。这可以减少查询的复杂性并提高性能。...索引扩展是一种技术,其中优化器可以使用索引中的额外信息来过滤结果集,而无需回表查找数据行。...物化子查询是将子查询的结果集存储在临时表中,以便在外部查询中重复使用。这可以提高某些类型查询的性能,但也可能增加内存使用。...不是所有的优化标志都适用于所有版本的 MySQL。在更改设置之前,请查阅相关文档以确保你了解每个标志的具体行为和限制。 避免在生产环境中盲目更改设置。应该基于实际的性能分析和测试来做出决策。

    23910

    故障分析 | MySQL 派生表优化

    Derivedtable(派生表) 实际上是一种特殊的 subquery(子查询),它位于 SQL 语句中 FROM 子句 里面,可以看做是一个单独的表。 ?...MySQL 5.7 之前的处理都是对 Derived table(派生表) 进行 Materialize(物化),生成一个 临时表 用于保存 Derived table(派生表) 的结果,然后利用 临时表...MySQL 5.7 中对 Derived table(派生表) 做了一个新特性,该特性允许将符合条件的 Derived table(派生表) 中的子表与父查询的表合并进行直接 JOIN,类似于 Oracle...解决派生表在关联过程中无法使用索引的问题。 我们先解决问题 1,这个问题比较简单。...all,那么该 SQL 是无法利用到 derived_merge 特性的,因此无法直接走索引过滤。

    1.5K20

    MySQL 执行计划深入解读

    查询类型主要是用于区别普通查询,联合查询,子查询等复杂的查询 simple,简单的select 语句,查询中不包含自查询或者 union primary, 查询若包含任何复杂的子部分,最外层查询则被标记为...primary subquery, 在 select 或 where 列表中包含子查询 derived,在 from 列表中包含自查询被标记为 derived (衍生)MySQL 会递归执行这些自查询,...若 union 包含在 from 子句子查询中,外层 select 将别标记为 derived union result, 从 union 表中获取结果的 select table 这行数据是关于那张表的...Null explain select min(id) from t1; mysql 能够在优化阶段分析查询语句,在执行阶段不用再访问表或者索引。...* from t1 where col1 = 'ab' and col2 = 'bc'; 表示索引中使用的字节数,可通过该列计算查询中的使用的索引的长度,在不损失精确性的情况下,长度越短越好 key_len

    67630

    MySQL Explain 执行计划详解、写高效SQL、灵活使用索引(实战)

    如果from子句后面包含select语句,则会产生这种类型,它会把中间结果存放在临时表中,但是在5.7中需要使用 set session optimizer_switch='derived_merge=...NULL: 代表查询在mysql能够在优化阶段分解查询语句的时候直接能完成,不需要查询表和索引,例如获取逐渐最大列或最小列: EXPLAIN select min(id),max(id) from film...film on film_actor.film_id = film.id; 可以看出访问film表的时候,type达到了eq_ref级别,因为id字段在film表中是唯一的,所以查询film表的时候按照...如果想强制mysql使用或忽视possible_keys列中的索 引,在查询中使用 force index、ignore index。...ref 这一列显示了在key列记录的索引中,表查找值所用到的列或常量,常见的有:const(常 量),字段名(例:film.id) rows 这一列是mysql估计要读取并检测的行数,注意这个不是结果集里的行数

    58330

    分析查询语句EXPLAIN详解,一步一步带你了解字段的含义

    ,执行查询会返回执行计划的信息,而不是执行这条 SQL 注意:如果 from 中包含子查询,仍会执行该子查询,将结果放入临时表中 官网:https://dev.mysql.com/doc/refman/...、subquery 包含在 select 中的子查询(不在 from 子句中),比如上面的例子就是 4、derived 包含在 from 子句中的子查询。...MySQL会将结果存放在一个临时表中,也称为派生表(derived的英文含义) explain select (select 1 from actor where id = 1) from (select...session optimizer_switch='derived_merge=off'; #关闭mysql5.7新特性对衍生表的合并优化 set session optimizer_switch=...,然后MySQL再去表中获取这些条目对应的完整行数据。

    67610

    技术分享 | MySQL 子查询优化

    ---- 有这么一个 SQL,外查询 where 子句的 bizCustomerIncoming_id 字段,和子查询 where 字句的 cid 字段都有高效索引,为什么这个 SQL 执行的非常慢,需要全表扫描...对于 derived 派生表,优化器有如下策略选择: derived_merge,将派生表合并到外部查询中(5.7 引入 ); 将派生表物化为内部临时表,再用于外部查询。...MySQL 会将相关的外层表压到子查询中,优化器认为这样效率更高。...在子查询中,优化器可以识别出 in 子句中每组只需要返回一个值,在这种情况下,可以使用 semijoin 来优化子查询,提升查询效率。...这里 semijoin 优化后的执行流程为: 1. 先执行子查询,把结果保存到一个临时表中,这个临时表有个主键用来去重; 2. 从临时表中取出一行数据 R; 3.

    3.2K21

    MySQL(七)联结表

    它包含另一个表的主键值,定义了两个表之间的关系 3、联结表的优点: ①数据信息不重复,从而不浪费时间和空间 ②如果某个数据信息变动,可以只更新该表中的某个记录,相关表数据不用变更 ③数据无重复,可以更有效的存储和方便的处理..., B_name; 该SQL语句中,select语句指定要检索的列(因为是创建关联,所以指定了3个列,区别在于A_name在A表中,B_name和B_mobile在另一个表);from语句列出了2个表分别是...表别名只在查询执行中使用,表别名不返回到客户端主机) 2、自联结 自联结:自联结通常作为外部语句用来替代从相同表中检索数据时使用的子查询语句。...p1前缀给出所需列名,否则MySQL将返回错误,因为其无法正确区分想要的具体为哪一列; 3、自然联结 无论何时对表进行联结,应至少有一个列出现在不止一个表中(被联结的列);标准的联结返回所有数据,自然联结排除多次出现...; 这条select语句使用关键字outer join来指定联结的类型(不是在where子句中指定);在使用outer join语法时,必须使用left或right指定包括其他所有行的表(right指出右边的表

    73310

    【重学 MySQL】五十一、更新和删除数据

    【重学 MySQL】五十一、更新和删除数据 在MySQL中,更新和删除数据是数据库管理的基本操作。 更新数据 为了更新(修改)表中的数据,可使用UPDATE语句。...condition:确定要更新行的过滤条件。 UPDATE语句的使用方式有两种: 更新表中特定的行:通过WHERE子句指定条件,只更新满足条件的行。...更新表中的所有行:省略WHERE子句,将更新表中的所有行(通常不推荐这样做,除非确实需要更新所有行)。...例如,要删除customers表中cust_id为10006的行,可以使用以下语句: DELETE FROM customers WHERE cust_id = 10006; 除了DELETE语句外,MySQL...这是一个非常危险的操作,一旦执行,数据将无法恢复。 TRUNCATE TABLE语句:用于快速删除表中的所有数据,但保留表结构。

    11610

    性能优化|这恐怕是解释Explain关键字最全的一篇文章

    from actor where id=1) from film derived: 衍生表,如果from子句后面包含select语句,则会产生这种类型,它会把中间结果存放在临时表中,但是在5.7中需要使用...set session optimizer_switch='derived_merge=off' 发现出现了derived查询了, union: 在 union 中的第二个和随后的 selectexplain...NULL: 代表查询在mysql能够在优化阶段分解查询语句的时候直接能完成,不需要查询表和索引,例如获取逐渐最大列或最小列:EXPLAIN select min(id),max(id) from film...如果想强制mysql使用或忽视possible_keys列中的索 引,在查询中使用 force index、ignore index。...ref 这一列显示了在key列记录的索引中,表查找值所用到的列或常量,常见的有:const(常 量),字段名(例:film.id) rows 这一列是mysql估计要读取并检测的行数,注意这个不是结果集里的行数

    53130

    这个MySQL优化原理剖析,比照X光还清楚

    如果无法命中缓存,就继续走到分析器的的一步,如果命中缓存就直接返回给客户端 。 如果使用查询缓存,在进行读写操作时会带来额外的资源消耗,如果在一个写多读少的环境中,缓存会频繁的新增和失效。...(派生表的SELECT, FROM子句的子查询); (9) UNCACHEABLE SUBQUERY(一个子查询的结果不能被缓存,必须重新评估外链接的第一行)。...如将主键置于where列表中,MySQL就能将该查询转换为一个常量,system是const类型的特例,当查询的表只有一行的情况下,使用system NULL: MySQL在优化过程中分解语句,执行时甚至不用访问表或索引...不损失精确性的情况下,长度越短越好。 8. ref 表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值。...Using filesort:MySQL中无法利用索引完成的排序操作称为“文件排序”,对结果使用一个外部索引排序,而不是按索引次序从表里读取行。

    70240

    SQL命令记录

    数据库表操作 CREATE TABLE 语句用于创建数据库中的表。 表由行和列组成,每个表都必须有个表名。...CHECK - 保证列中的值符合指定的条件。 DEFAULT - 规定没有给列赋值时的默认值。 1.2.2. 索引 您可以在表中创建索引,以便更加快速高效地查询数据。...用户无法看到索引,它们只能被用来加速搜索/查询。 注释:更新一个包含索引的表需要比更新一个没有索引的表花费更多的时间,这是由于索引本身也需要更新。...INSERT INTO SELECT 语句从一个表复制数据,然后把数据插入到一个已存在的表中。目标表中任何已存在的行都不会受影响。...修改 请注意 SQL UPDATE 语句中的 WHERE 子句! WHERE 子句规定哪条记录或者哪些记录需要更新。如果您省略了 WHERE 子句,所有的记录都将被更新!

    22020

    【MySQL】MySQL数据库的进阶使用

    如果冲突的数据和要更新的数据不同,则会先删除表中原有的冲突数据,然后在新插入要更新的数据,sql语句返回的结果就是2 row affected;如果update的数据和表中不冲突的话,则该语句的作用和普通的...retrieve是取回的意思,在MySQL中可以认为是读取操作,MySQL中查询数据的操作,也就是R操作最为频繁,同样也是需要重点学习的操作,在R操作里面,最典型的SQL语句就是select语句,用于查询表中的数据...实际中非常不建议使用全列查询,因为这需要显示表的所有数据,而部分的数据可能此时并不在内存中,则mysqld服务还需要磁盘IO来加载表的剩余数据,降低MySQL查询的性能,同时全列查询还无法使用索引来优化查询过程...update用于更改表中某一行或者多行的数据,值得注意的是,在使用update对表中数据进行更新的时候,如果不跟上where子句进行数据筛选的话,则update会对表中所有的行进行某一列字段值的更新,因为...内连接实际就是先根据on的条件对表的连接结果作筛选,所以关键字的优先级为from>on>join,因为作笛卡尔积之前,要指定表的连接条件,让两个表在真正连接时,有目的的连接。

    35120

    MySQL安装

    管理 mysql 命令 这里是重要的MySQL命令,经常在MySQL数据库的管理或工作中使用: USE Databasename : 用于选择在MySQL工作区指定的数据库。...可以指定使用任何条件在WHERE子句中。 可以一次更新一个表中的值。 当想更新表中选定行,WHERE子句是非常有用的。...语法 这里是DELETE命令从一个MySQL表中删除数据的通用的SQL语法: DELETE FROM table_name [WHERE Clause] 如果WHERE子句没有指定,则所有MySQL表中的记录将被删除...可以指定使用任何条件在WHERE子句中。 可以一次删除一个表中的所有记录。 当要删除一个表中选择特定行,WHERE子句是非常有用的。...的表中删除一个现有列,那么使用ALTER命令以及DROP子句如下: mysql> ALTER TABLE testalter_tbl DROP i; 如果在表中列是唯一的一个,那么DROP将无法正常工作

    11.3K71

    MySQL 5.5迁移到5.7的性能问题排查案例

    问题的背景是有一个业务的数据库从MySQL 5.5迁移到了MySQL 5.7,原来在5.5中有一个SQL秒级就能完成,但是在5.7版本中执行时间长了好多,业务也产生了延迟。...另外这个SQL在5.5中性能很好,在5.7中性能很差,一种很直接的思路就是不用修改SQL,同时在5.7中得把它优化好。...派生表其实是一个不大好的使用方式,同时也是MySQL不擅长的,主要有几点,第一是MySQL里面的派生表会生成临时文件,存储引擎默认是MyISAM,第二是在性能上会有很多隐患。...1.搭建MySQL 5.5和MySQL 5.7的测试环境 2.把相关表的数据导入两个环境 3.模拟测试指定的SQL语句,在MySQL 5.7中查看指定语句的执行计划。...这是在前面的方案不起效的时候我们需要做的最后保证,如果这些都无法保证,我们显然会很被动。 所以我开始正式介入的时候,就没有花太多功夫在优化器参数上。 而是逐步从子查询,派生表的角度来考虑。

    1.1K20

    大白话讲解Mysql执行计划

    ,其余为union(extra中union result是union去掉重复值的临时表) 5.7开始union all不会出现union result,因为不去重 subquery 不是用在from后面的...5.7中optimizer_switch='derived_merge=on'可以把简单subquery打开成join derived_merge为on时被驱动表的连接条件要有索引,为off时被驱动表结果集要小...不能使用range,const,ref的情况下,且只查询索引列,即不回表,使用索引进行排序或者聚合即省略排序 索引(a,b),select a from xxx where b = ''; 即联合索引中前导列不在...where条件中,且查询列在索引中 在聚合运算中group by后面的列在索引或者primary key中,且查询列也在索引中 all 无索引 对索引列加工 索引列隐式类型转换 对日期类型进行like...where关键字,表示从存储引擎中拿到数据后再加工的比例 5.7开始该值比较准确 1.11 Extra Distinct MySQL在join过程中取出一行之后查询另一个表时,碰到一行就停止,有点像

    91210
    领券