Kal*_*ick 5 php mysql timestamp sql-delete
我面临有关 mysql 表更新的问题。我有包含 5 列的表,包括 ID、NAME、TIMESTAMP 和其他 2 列。我的问题是我想删除那些 ID 和 NAME 都与另一行的 ID 和 NAME 匹配的行,同时保留最新的 TIMESTAMP 行。
我正在尝试以下查询,但它显示了错误:
#1093 - 不能在 FROM 子句中指定目标表 'dummy1' 进行更新
查询是:
delete from dummy1 where LAST_USED_DATE not in(
select max(LAST_USED_DATE) from dummy1
group by ID,NAME);
Run Code Online (Sandbox Code Playgroud)
尝试
DELETE d
FROM dummy1 d JOIN
(
SELECT d1.id, d1.name, MAX(d1.last_used_date) max_date
FROM dummy1 d1 JOIN dummy1 d2
ON d1.id = d2.id AND d1.name = d2.name
GROUP BY id, name
) q ON d.id = q.id AND d.name = q.name AND d.last_used_date <> q.max_date
Run Code Online (Sandbox Code Playgroud)
这是SQLFiddle演示
更新要仅检查重复的 id,您可以稍微调整上面的查询
DELETE d
FROM dummy1 d JOIN
(
SELECT d1.id, MAX(d1.last_used_date) max_date
FROM dummy1 d1 JOIN dummy1 d2
ON d1.id = d2.id
GROUP BY id
) q ON d.id = q.id AND d.last_used_date <> q.max_date
Run Code Online (Sandbox Code Playgroud)
这是SQLFiddle演示
UPDATE2删除具有最大时间戳的重复项
1)您可以通过引入带有选项的唯一索引IGNORE。在这种情况下,MySql 将自行决定保留哪些记录。
ALTER TABLE dummy1 ENGINE MyISAM;
ALTER IGNORE TABLE dummy1 ADD UNIQUE (id, name);
ALTER TABLE dummy1 ENGINE InnoDB;
Run Code Online (Sandbox Code Playgroud)