我将一些记录从一个表复制到另一个表 使用此查询:
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中运行该查询。
我觉得用这种方式很蠢,但显然别无选择。
答案 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进行一次交易来完成它。
快乐的查询!