MySql删除 - 与select(join)相同

时间:2011-05-09 07:54:25

标签: mysql sql-delete

我将一些记录从一个表复制到另一个表 使用此查询:

insert into pages_finished (keyword,pages,resultlist,done,current)
select keyword,pages,resultlist,done,current 
 from pages_done o  
 where  (select count(*) as totalPages from pages_done x  where x.keyword = o.keyword)-1 = pages 

现在我想从源表中删除相同的记录, 我认为这很简单:

delete from pages_done o  
 where  (select count(*) as totalPages from pages_done x  where x.keyword = o.keyword)-1 = pages 

但这不起作用。 谁能告诉我这样做的正确方法是什么?

在@bgdrl回答后,我正在考虑只运行select, 获取应复制的所有记录的id, 然后删除; 但我认为必须有一个更简单的解决方案吗?

即使将@bgdrl标记为正确答案, 只是因为这个事实。

对任何对我最终做的事感兴趣的人: 我做了同样的选择我开始(但只选择了id列,因为选择所有列将杀死我的可怜的计算机), 将其导出到INSERT STATMENTS(使用mysqlworkbench), 在记事本中打开文本文件, 将所有INSERT INTO ...替换为DELETE FROM WHERE ID=, 并在mysql中运行该查询。

我觉得用这种方式很蠢,但显然别无选择。

2 个答案:

答案 0 :(得分:2)

从mysql站点:“您无法修改表并从子查询中的同一表中进行选择。这适用于DELETE,INSERT,REPLACE,UPDATE等语句。” http://dev.mysql.com/doc/refman/5.1/en/subqueries.html

答案 1 :(得分:0)

请在执行步骤之前备份表格。

遵循以下步骤

第1步

CREATE TABLE pages_done_ids 
    SELECT o.id FROM pages_done AS o  
    WHERE 
    (
        SELECT count(*) AS totalPages 
        FROM pages_done AS x  
        WHERE x.keyword = o.keyword
    )-1 = o.pages

第2步

DELETE FROM pages_done AS o  
WHERE o.id IN (SELECT id FROM pages_done_ids)

第3步

DROP TABLE pages_done_ids;

好的,你可以使用TEMPORARY TABLES进行一次交易来完成它。

快乐的查询!