MySQL 使用子查询删除行

标签 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 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/

相关文章:

javascript - 通过ajax发送php请求onclick

mysql - SQL 聚合函数 MAX/MIN/AVG/COUNT 的子查询等价物是什么

oracle - NOT IN 运算符在 Oracle 中未按预期工作

python - 根据列值删除 Pandas 中的 DataFrame 行

indexing - 如何删除 Pandas DataFrame 中的一行并重新标记索引?

mysql - 如何删除没有主键的所有重复行?

c# - 在 C# 上执行查询时出错

php - 两个外键,如何用 laravel eloquent 映射

php - 如果列中的所有行都为 true,则返回 true

sql - Count with subquery, group_by 和 Left join