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很难打字。我在用智能手机,而且我的英语不好。你能试一下我对其他问题的回答吗?我真的很想知道这个答案能让你进步。请让我知道。