mysql去除重复数据www.2003.com

2020-03-13 作者:计算机教程   |   浏览(147)

昨天发现程序中数据分析的结果不对,重新进行分析后,原数据仍在,有值的字段被累计。心说,不对啊,是重新生成记录后才分析的啊。难道忘了DELETE了?查代码,发现有删除语句。于是在查询分析器中执行,报错。反复试几次,明白了,Delete From不认表名别名!回头想下,当初程序改完后主要是在Oracle中测的,SQLServer一直没细测。

select可以取别名,delete不能。

之所以要用别名,是因为where条件中需要用到子查询写一些条件,下面不写那么复杂,仅说明一下问题。

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

DELETE FROM TABLEA A WHERE A.FIELD1=10 DELETE TABLEA FROM TABLEA A WHERE A.FIELD1=10 DELETE FROM TABLEA WHERE TABLEA.FIELD1=10

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

两点经验:

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

1、测试要全面;2、要自信,写程序时考虑的情况挺全的。

 

update情况


update T_report a set a.status='1' where a.report_Seq=1234

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

执行失败

 

update a set a.status='1' from T_report awhere a.report_Seq=1234

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 andfs_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 andfs_using is null and fs_lifetime is null)   

 

本文由www.2003.com发布于计算机教程,转载请注明出处:mysql去除重复数据www.2003.com

关键词: