簡體   English   中英

無法從設置的MySQL表中刪除

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM