首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带有子查询的MySQL删除行

带有子查询的MySQL删除行
EN

Stack Overflow用户
提问于 2013-11-21 11:05:19
回答 2查看 203关注 0票数 1

我想从链接表中删除重复的行。此处的select查询确实有效:

代码语言:javascript
运行
复制
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
);

当我更改相同的查询以删除时:

代码语言:javascript
运行
复制
    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语法中有一个错误。

这里有什么问题?有人能帮我修复查询吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-21 11:11:32

您可以使用没有JOIN和内联视图的EXISTS来实现这一点,如下所示:

代码语言:javascript
运行
复制
DELETE t1
FROM LINKS t1, LINKS t2
WHERE t2.cntid = t1.cntid
    AND t2.title= t1.title
    AND t2.lnkid > t1.lnkid

这比使用EXISTS更快。当然,您选择的可以这样转换。

代码语言:javascript
运行
复制
SELECT *
from LINKS t1, LINKS t2
WHERE t2.cntid = t1.cntid
    AND t2.title= t1.title
    AND t2.lnkid > t1.lnkid

如果您尝试删除,请使用set autocommit = '0'

票数 2
EN

Stack Overflow用户

发布于 2013-11-21 11:10:25

尝试:

代码语言:javascript
运行
复制
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);

SQLFiddle演示

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20119211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档