使用条件从mysql中删除
我如何从mysql数据库的这个表中删除行,在删除之后,valeurs列中应该有4个不同的值 我的数据库的实际状态:使用条件从mysql中删除,mysql,Mysql,我如何从mysql数据库的这个表中删除行,在删除之后,valeurs列中应该有4个不同的值 我的数据库的实际状态: +----+-----------+---------+---------------------+ | id | action_id | valeurs | temps_action | +----+-----------+---------+---------------------+ | 81 | 1 | ON_1 | 2016-04-26
+----+-----------+---------+---------------------+
| 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-每个派生表都必须有自己的别名