mysql 通过当前表条件搜索结果删除 [HY000][1093]

mysql 通过当前表条件搜索结果删除 [HY000][1093],第1张

mysql 通过当前表的搜索结果删除,不支持,如下:

由于 truck_id 是通过 truck_postion表查询出来的,所以删除的时候不能删除,当然,oracle可以,这应该是mysql的一个bug。

执行会报错如下:

在select 外面包裹一层,就可以了,比如上面的处理方法:

这样他认为是从a表中查出来的,而不是从truck_position表中查出来的,哎,这解释器真是傻.

经常使用mysql 的查询功能,比较少使用删除。最近在网上做了几个sql题,有一个删除的问题,本以为挺简单,确报出如题目的错误,在网上一搜索才发现了这个问题。谨以此作为自己的学习记录,至于答案本身网上已经有很多了,要感谢各位遇到此问题并给出答案的人们。

表:

+--------+---------+------+---------------+------------+----------+

| id   | xuehao  | name | kechengid | kecheng | fenshu |

+------+-----------+------+---------------+------------+-----------+

|    1 | 2005001 | 张三 |        1         |    数学    |    69      |

|    2 | 2005002 | 李四 |        1         |    数学    |    89      |

|    3 | 2005001 | 张三 |        1          |    数学    |    69     |

+------+------------+------+---------------+------------+----------+ 

需求就是删除除了id 之外,其余信息全部相同的冗余记录。

当时的思路即使先求出这些冗余的信息的一个最小id,只要这一条记录,不是最小id的记录删除就可以了。因此当时使用了这样的语句:

delete from tb02 where id not in (select min(id) from tb02 group by xuehao, name, kechengid, kecheng, fenshu)

结果就报错:

ERROR 1093 (HY000): You can't specify target table 'tb02' for update in FROM clause。

后来到网上搜索,原来是因为  在mysql中,不支持先 select 一个表的记录,在按此条件进行更新和删除同一个表的记录。

解决办法是,将select得到的结果,再通过中间表select一遍,这样就可以规避错误,这个问题只出现于mysql。oracle 并不会出现。

修改后的语句:

delete from tb02 where id not in (select t.id from (select min(id) as id from tb02 group by xuehao,name,kechengid,kecheng,fenshu ) t)

这样就顺利的删除了除了id 其余全部冗余的数据

每天前进一小步,或许可以和乌龟一样长寿!

mysql删除第一行数据的方法:

首先你要确定能够唯一确定你那一行数据的字段或字段组合是哪些,

DELETE FROM 表名 WHERE 字段1 = ‘' and 字段2 = ‘' and ...字段1,...为能够唯一确定某一行数据的字段组合,‘'中填写你要删除的字段具体值就可以了

如果有主键,则直接利用主键确定某一行就可以了。

1

DELETE FROM 表名 WHERE 主键 = ‘具体值'。

1

delete from ms_cf01 where brxm='张三' and id='7598'

其中: ms_cf01 为你所要删除那条数据所属的表。

brxm,id 为你所要删除数据的条件。

上面的语句实现的效果是:删除表ms_cf01中,符合brxm等于张三 且 id等于7598的行数据。

这样就完成了,删除一行的数据 *** 作


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8342952.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-15
下一篇 2023-04-15

发表评论

登录后才能评论

评论列表(0条)

保存