首页 > 其他 > 详细

delete in 事故清表

时间:2021-01-28 18:04:22      阅读:23      评论:0      收藏:0      [点我收藏+]
DELETE FROM dbo.FW_TASK_ACCEPT
    WHERE TASK_ID IN ( SELECT TASK_ID
                        FROM dbo.FW_TASK );

上述是事故语句

按照字面的的语法本身没什么错误,编译也不会报错。导致删除表全部数据根源在于上下文,或者说作用域,这里我个人这个称呼便于理解

有一个基础的问题就是再子查询中 select 字段的时候是可以查询外层 “字段 ” 的,这就是主要的事故原因。我们看子查询中 TASK_ID  这里因为失误 写成了  

SELECT TASK_ID  FROM dbo.FW_TASK  其实  dbo.FW_TASK  表中并没有这个  TASK_ID  字段,但是因为作用域关系  SELECT TASK_ID  也是合法的,只不过是上层的   TASK_ID,那

这样就明了了,DELETE  删除时逐条删的,那么每一次  SELECT TASK_ID  都是自己的   TASK_ID,所以会删除 dbo.FW_TASK_ACCEPT 表中全部数据。

总结:

1.DELETE FROM ...  WHERE   必须带  WHERE

2.语句操作必须带重命名,如:

DELETE FROM dbo.FW_TASK_ACCEPT
    WHERE TASK_ID IN ( SELECT fTask.ID
                        FROM dbo.FW_TASK fTask);

3.理解掌握Sql语法

delete in 事故清表

原文:https://www.cnblogs.com/myloveblogs/p/14338499.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!