[英]Unable to delete from MySQL table where in set
第一個查詢提供應刪除的一組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
為什么不能這樣指定目標表?
您不能從table
delete
並在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
在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
-這就是我讀取原始查詢的方式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.