我想从我的链接表中删除重复的行。这里的这个选择查询确实有效:
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
);
它不再工作并声明:错误 1064 (42000):您的 SQL 语法有错误
这里有什么问题?有人可以帮助修复查询吗?
最佳答案
您可以只使用 JOIN
而不使用 EXISTS
和内联 View ,如下所示:
DELETE t1
FROM LINKS t1, LINKS t2
WHERE t2.cntid = t1.cntid
AND t2.title= t1.title
AND t2.lnkid > t1.lnkid
这比使用 EXISTS
更快。当然你SELECT也可以这样转换。
SELECT *
from LINKS t1, LINKS t2
WHERE t2.cntid = t1.cntid
AND t2.title= t1.title
AND t2.lnkid > t1.lnkid
如果您尝试删除,请 set autocommit = '0'
关于MySQL 使用子查询删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20119211/