我正面临关于mysql表更新的问题.我有包含5列的表,包括ID,NAME,TIMESTAMP和其他2列.我的问题是我想删除那些ID和NAME与另一行,s ID和NAME匹配的行,并保留最新的TIMESTAMP行.
#1093 – You can’t specify target table ‘dummy1’ for update in FROM clause
查询是:
delete from dummy1 where LAST_USED_DATE not in(
select max(LAST_USED_DATE) from dummy1
group by ID,NAME);
解决方法:
尝试
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
这是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
这是SQLFiddle演示
UPDATE2删除具有最大时间戳的dupes
1)您可以通过引入具有IGnorE选项的唯一索引.在那种情况下,MysqL将决定自己保留哪些记录.
ALTER TABLE dummy1 ENGINE MyISAM;
ALTER IGnorE TABLE dummy1 ADD UNIQUE (id, name);
ALTER TABLE dummy1 ENGINE InnoDB;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。