`

mysql 的delete from 子查询限制

 
阅读更多


1.使用mysql进行delete from操作时,若子查询的 FROM 字句和更新/删除对象使用同一张表,会出现错误。

mysql> DELETE FROM tab1 WHERE col1 = ( SELECT MAX( col1 ) FROM tab1 );
ERROR 1093 (HY000): You can’t specify target table ‘tab1′ for update in FROM clause

针对“同一张表”这个限制,撇开效率不谈,多数情况下都可以通过多加一层select 别名表来变通解决,像这样

DELETE FROM tab1
WHERE col1 = (
SELECT MAX( col1 )
FROM (
SELECT * FROM tab1
) AS t
);


------------------------------------------------------------------------

2. mysql delete from where in 时后面 的查询语句里不能加where条件


Sql代码
      delete from `t_goods` where fi_id in (select * from ( select fi_id from `t_goods` where fs_num is null and fs_name is null and fs_type is null and fs_using is null and fs_lifetime is null) b) 


Sql代码
      delete from `t_goods` where fi_id in (select fi_id from `t_goods` where fs_num is null and fs_name is null and fs_type is null and fs_using is null and fs_lifetime is null)  


Sql代码
      delete from `t_goods` where fi_id in ( select fi_id from `t_goods` )  

上面三种情况,只有中间的不能执行。

综合起来就是mysql delete from where in 时后面 的查询语句里不能加where条件

---------------------------------------------------------------------------


3. delete from table... 这其中table不能使用别名

Sql代码

    delete from student a where a.id in (1,2);(执行失败)

   

     select a.* from student a where a.id in (1,2);(执行成功)
分享到:
评论
2 楼 lwpan 2014-10-17  
  很受启发  update也可以
1 楼 wuliaolll 2014-08-29  
不错,总算找到原因了

相关推荐

    关于mysql delete的问题小结

    这种情况下,MySQL可能会报错,因为`DELETE`与`SELECT`子句一起使用时,子查询可能无法正确处理。为了解决这个问题,你可以创建一个临时表来存储满足条件的值,然后在主查询中使用临时表: ```sql CREATE TABLE tmp...

    mysql delete limit 使用方法详解

    如果需要限制删除的数量,可以使用子查询来实现类似的效果,如下所示: ```sql DELETE A FROM test1 A INNER JOIN (SELECT ID FROM test2 LIMIT 10) B ON A.id = B.id; ``` 这将删除`test1`表中与`test2`表前10...

    MySql常用查询命令操作大全

    以上是MySQL的一些基础查询和操作命令,实际上MySQL支持更复杂的查询语法,如JOIN、GROUP BY、HAVING、子查询等,以及视图、存储过程、触发器等高级功能,这些都可以帮助用户更高效地管理和处理数据库中的数据。...

    MySQL优化之使用连接(join)代替子查询

    本文将探讨如何通过使用连接(JOIN)操作来替代子查询(Sub-Queries),以提高查询效率。 子查询是一种强大的SQL工具,它允许在一个查询中嵌套另一个查询,以获取所需的结果。然而,虽然子查询提供了方便和灵活性,...

    Mysql数据库中子查询的使用

    在MySQL中,子查询通常被包含在圆括号中,它可以在SELECT、INSERT、UPDATE、DELETE语句中作为表达式的一部分出现。 我们来看一个子查询的例子: ```sql SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2)...

    mysql删除数据记录PPT

    这个例子中,子查询找到与课程名匹配的课程ID,然后主查询删除关联的记录。 4. **利用MySQL5.0数据库一次删除多条数据记录**: MySQL5.0的图形用户界面支持一次性执行多个`DELETE`语句。例如,可以连续写入`DELETE...

    MySql 中查询树形结构的全部子项列表 Function

    本文将深入探讨如何在MySQL中查询树形结构的全部子项列表,结合提供的`MySql_Link_Function.sql`文件,我们将探讨一种有效的方法来实现这一功能。 首先,树形结构在数据库中的存储通常采用自引用的方式,即每个节点...

    使用案例加深对MySQL SQL查询理解

    子查询也是SQL查询中常见的部分,它们可以嵌套在其他查询中提供额外的筛选或计算。然而,子查询可能导致性能问题,尤其是在大型数据集上。有时,可以使用JOIN或临时表来替代子查询,从而提高性能。 此外,GROUP BY...

    mysql语句集合包括模糊查询索引函数

    1. **数据查询.sql**:可能包含各种查询示例,如JOIN操作、子查询、聚合函数的使用等。 2. **mysql.sql**:可能是一个包含常见MySQL语句的脚本文件,可以学习和参考。 3. **主外键约束.txt**:这是数据库关系模型的...

    mysql面试题-查询语句

    6. **子查询**:子查询是在主查询内部的查询,它可以作为表达式的一部分,也可以用于WHERE或FROM子句中。例如,`SELECT column FROM table WHERE column IN (SELECT column FROM another_table WHERE condition)`。 ...

    MySQL 查询重复内容只显示一条

    4. **删除重复数据**:如果你希望彻底删除重复数据,只保留一条,可以使用`DISTINCT`关键字创建一个新的表,或者使用`DELETE`语句结合子查询。但请注意,删除操作应谨慎进行,以免丢失重要信息。例如: ```sql ...

    mysql递归查询.txt

    DELETE FROM tmpLst; CALL createChildLstOne(rootId, 0); SELECT tmpLst.*, tb_content_category.* FROM tmpLst, tb_content_category WHERE tmpLst.id = tb_content_category.id ORDER BY tmpLst.sno; END;...

    mysql查询gitbook书籍

    6. **子查询**:一个查询嵌套在另一个查询中,用于获取满足外部查询条件的数据。 7. **DISTINCT关键字**:用于去除结果集中的重复行。 8. **ORDER BY子句**:用于对查询结果进行排序,可以按升序(ASC)或降序...

    mysql查询语句汇总.rar

    - **关联子查询**:将子查询与外部查询关联,如`SELECT * FROM table1 WHERE column1 = (SELECT column2 FROM table2 WHERE condition);` 5. **分组和聚合** - **GROUP BY**:按指定列进行分组,`SELECT column1,...

    MySQL SQL语句练习题及答案

    在 MySQL 中,嵌套查询使用子查询。例如,查询平均分不及格的学生人数: ```sql SELECT COUNT(*) FROM student WHERE avg_grade ; ``` 这个练习题涵盖了 MySQL SQL 语句的多方面知识点,包括创建表、插入数据、删除...

    MySQL多表查询、事务和管理用户及授权

    2. **子查询**:子查询可以在主查询中嵌套,用于检索满足特定条件的子集数据。它可以作为FROM、WHERE或HAVING子句的一部分。 3. **UNION操作**:UNION用于合并两个或更多SELECT语句的结果集,去除重复行。如果需要...

    MySQL查询语句汇总.zip

    子查询可以嵌套在主查询中,用于执行更复杂的查询逻辑。此外,聚合函数如COUNT、SUM、AVG、MAX和MIN,以及GROUP BY和HAVING子句用于统计和分组数据。 在"资源说明.pdf"中,可能会详细介绍如何利用这些概念和语法,...

Global site tag (gtag.js) - Google Analytics