【发布时间】:2013-01-29 01:32:18
【问题描述】:
我有一些数据存储在一个名为 MyTable 的 MySQL 表中,如下所示:
+----------+-----------+---------------------+
| my_id | amount | updated |
+----------+-----------+---------------------+
| 105415 | 81 | 2013-02-13 00:00:00 |
| 105414 | 33 | 2013-02-13 00:00:00 |
| 220801 | 240 | 2013-02-13 00:00:00 |
| 105411 | 118 | 2013-02-13 00:00:00 |
| 105411 | 118 | 2013-02-12 00:00:00 |
| 220801 | 240 | 2013-02-12 00:00:00 |
| 105414 | 33 | 2013-02-11 00:00:00 |
| 105415 | 81 | 2013-02-11 00:00:00 |
+----------+-----------+---------------------+
我想做的是删除昨天 (2013-02-12) 中与今天 (2013-02-13) 具有相同 my_id 和数量的所有行。
我知道如何选择今天的所有数据:
SELECT * FROM 'MyTable' WHERE 'updated' = CURDATE()
我知道如何选择昨天的所有数据:
SELECT * FROM 'MyTable' WHERE 'updated' = CURDATE()-1
我知道 DELETE 命令的语法 (DELETE FROM 'MyTable' WHERE...)。
如何删除昨天和今天 my_id 和 amount 匹配的行?
在给出的示例中,我想删除这些行:
| 105411 | 118 | 2013-02-12 00:00:00 |
| 220801 | 240 | 2013-02-12 00:00:00 |
我想保留这些行:
+----------+-----------+---------------------+
| my_id | amount | updated |
+----------+-----------+---------------------+
| 105415 | 81 | 2013-02-13 00:00:00 |
| 105414 | 33 | 2013-02-13 00:00:00 |
| 220801 | 240 | 2013-02-13 00:00:00 |
| 105411 | 118 | 2013-02-13 00:00:00 |
| 105414 | 33 | 2013-02-11 00:00:00 |
| 105415 | 81 | 2013-02-11 00:00:00 |
+----------+-----------+---------------------+
【问题讨论】:
-
不是处理症状,而是解决原因:为什么要生成这样一个重复的条目集?对 my_id 和 amount 使用唯一约束,并在保存数据时仅更新
ON DUPLICATE KEY-Clause 中的日期。 -
dognose,我已经按照你的建议修复了我的脚本,但它仍然给我留下了一个需要从我的问题中查询的数据库来清理。
标签: mysql database join inner-join