Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用条件从mysql中删除_Mysql - Fatal编程技术网

使用条件从mysql中删除

使用条件从mysql中删除,mysql,Mysql,我如何从mysql数据库的这个表中删除行,在删除之后,valeurs列中应该有4个不同的值 我的数据库的实际状态: +----+-----------+---------+---------------------+ | id | action_id | valeurs | temps_action | +----+-----------+---------+---------------------+ | 81 | 1 | ON_1 | 2016-04-26

我如何从mysql数据库的这个表中删除行,在删除之后,valeurs列中应该有4个不同的值

我的数据库的实际状态:

+----+-----------+---------+---------------------+
| id | action_id | valeurs | temps_action        |
+----+-----------+---------+---------------------+
| 81 |         1 | ON_1    | 2016-04-26 11:14:43 |
| 80 |         2 | OFF_2   | 2016-04-26 11:14:41 |
| 84 |         2 | OFF_2   | 2016-04-26 11:14:48 |
| 83 |         1 | ON_1    | 2016-04-26 11:14:46 |
| 79 |         1 | OFF_1   | 2016-04-26 11:14:40 |
| 78 |         2 | ON_2    | 2016-04-26 11:14:38 |
| 77 |         1 | ON_1    | 2016-04-26 11:14:35 |
| 82 |         2 | OFF_2   | 2016-04-26 11:14:45 |
+----+-----------+---------+---------------------+
我想以以下方式结束:

+----+-----------+---------+---------------------+
| id | action_id | valeurs | temps_action        |
+----+-----------+---------+---------------------+
| 81 |         1 | ON_1    | 2016-04-26 11:14:43 |
| 80 |         2 | OFF_2   | 2016-04-26 11:14:41 |
| 79 |         1 | OFF_1   | 2016-04-26 11:14:40 |
| 78 |         2 | ON_2    | 2016-04-26 11:14:38 |
+----+-----------+---------+---------------------+

你可以用这种方式

delete from   my_table  as t
where (t.id, t.valeurs) not  in ( select max(t2.id), t2.valeurs 
                            from my_table as t2
                             group by valeurs); 

这样的查询为每个操作id、valeurs保存具有max temps\u action的行

delete 
    from  my_table 
  where (action_id, temps_action, valeurs) not in 
      (select * from (select action_id, max(temps_action), valeurs 
             from my_table 
          group by action_id, valeurs) t1); 

您真正想要做的是删除重复的行。下面是一个示例查询,可以帮助您:

DELETE FROM TableName  
WHERE valeurs IN (SELECT * 
             FROM (SELECT valeurs FROM TableName 
                   GROUP BY valeurs
 HAVING (COUNT(*) > 1) AS Something
                  ) 
            );

您想保留哪些?可能存在重复的错误-您不能为第条中的更新指定目标表“…”。我知道,我在尝试执行此操作时遇到此错误query@MaxP. 我想是用化名解决的。。因此,delete表和subselect并不相同。什么意思是
OP
?对不起question@Fred-ii-:)无论如何,如果这对OP不有用,那么对其他答案作者来说似乎很有用。。有时对我也很有用#1093-您不能指定目标表“…”用于从中进行更新clause@MaxP.可通过添加subquery@MaxP. 您并不懒惰:)错误#1248-每个派生表都必须有自己的别名