MySQL使用子查询删除行
我想从我的链接表中删除重复的行。此处的选择查询不起作用:MySQL使用子查询删除行,mysql,subquery,delete-row,Mysql,Subquery,Delete Row,我想从我的链接表中删除重复的行。此处的选择查询不起作用: SELECT * from LINKS t1 WHERE EXISTS ( SELECT * from LINKS t2 where t2.cntid = t1.cntid and t2.title= t1.title and t2.lnkid > t1.lnkid ); 当我将同一查询更改为删除时: DELETE from LINKS t1 WHERE EXISTS
SELECT *
from LINKS t1
WHERE EXISTS (
SELECT *
from LINKS t2
where t2.cntid = t1.cntid
and t2.title= t1.title
and t2.lnkid > t1.lnkid
);
当我将同一查询更改为删除时:
DELETE from LINKS t1
WHERE EXISTS (
SELECT *
from LINKS t2
where t2.cntid = t1.cntid
and t2.title= t1.title
and t2.lnkid > t1.lnkid
);
它不再工作并声明:ERROR 1064(42000):您的SQL语法中有一个错误
这里的问题是什么?有人能帮忙解决这个问题吗?试试:
DELETE t1 from LINKS t1
WHERE EXISTS (SELECT * from (select * from LINKS) t2
where t2.cntid = t1.cntid
and t2.title= t1.title
and t2.lnkid > t1.lnkid);
您只能使用
JOIN
而不使用EXISTS
和内联视图,如下所示:
DELETE t1
FROM LINKS t1, LINKS t2
WHERE t2.cntid = t1.cntid
AND t2.title= t1.title
AND t2.lnkid > t1.lnkid
这比使用EXISTS
更快。当然,您可以选择这样转换
SELECT *
from LINKS t1, LINKS t2
WHERE t2.cntid = t1.cntid
AND t2.title= t1.title
AND t2.lnkid > t1.lnkid
如果您尝试删除,plz
set autocommit='0'
,因为DELETE
和SELECT
具有不同的语法,不是吗?。谢谢,删除查询正在运行。但是,由于有几百万行重复,删除查询现在运行了一个多小时,看不到结束。“我能加快速度吗?”sub很难打字。我在用智能手机,而且我的英语不好。你能试一下我对其他问题的回答吗?我真的很想知道这个答案能让你进步。请让我知道。