第一个查询提供了应删除的一组ID。第二个查询尝试删除它们。
select abstracts.pmid from abstracts where abstracts.pmid not in
(select pmid from erpubtbl);
//Fine 555,556,...
delete from abstracts where (pmid) IN (
select abstracts.pmid from abstracts where abstracts.pmid not in
(select pmid from erpubtbl)
);
//You can't specify target table 'abstracts' for update in FROM clause
为什么不能像这样指定目标表?
答案 0 :(得分:1)
您不能delete
来自table
和参考 subquery
中的同一张表。
可能这个技巧应该可以帮到你
DELETE FROM abstracts
WHERE ( pmid ) IN (SELECT *
FROM (SELECT abstracts.pmid
FROM abstracts
WHERE abstracts.pmid NOT IN (SELECT pmid
FROM erpubtbl))a);
甚至是Inner Join
DELETE FROM abstracts
USING abstracts
INNER JOIN (SELECT abstracts.pmid
FROM abstracts
WHERE abstracts.pmid NOT IN (SELECT pmid
FROM erpubtbl)
) b
ON abstracts.pmid = b.pmid
答案 1 :(得分:1)
在MySQL中执行此操作的一种方法是使用join
:
delete a
from abstracts a join
(select a2.pmid
from abstracts a2
where a2.pmid not in (select pmid from erpubtbl)
) aa
on a.pmid = aa.pmid;
但是,我认为这更简单,没有提到abstracts
表两次:
delete a
from abstracts a left join
erpubtbl e
on a.pmid = e.pmid
where e.pmid is null;
这将删除abstracts
中pmid
不在erpubtbl
中的行 - 这就是我阅读原始查询的方式。