簡體   English   中英

刪除具有鏈接到另一個表的鍵作為外鍵的表的一行

[英]Delete a row of a table that has a key linked to another table as foreign key

我剛剛開始修改mysql。 我有三張桌子。

    PURCHASEORDERS
    PURCHASEORDERLINE(HAS A FOREIGN KEY OF PURCHASEORDERID AND STOREROOM ID)
    STOREROOM

我試圖從采購訂單中刪除一行,並意識到這將是一個問題,因為它鏈接到采購訂單行的外鍵。 現在,根據我的理解,我不得不說(用偽代碼)

    delete from purchaseorders where purchaseid not exists in 
    purchaseorderline.purchaseid

有什么建議可以用mysql術語表達嗎?

jsut使用不在

  delete from purchaseorders where purchaseid not in 
  ( select   purchaseorderline.purchaseid from purchaseorderline where 
        purchaseid  is not null
  )

您似乎想要一個not exists子查詢:

delete from purchaseorders po
    where not exists (select 1
                      from purchaseorderline pol
                      where po.purchaseid = ol.purchaseid
                     );

等效公式為left join

delete po
    from purchaseorders po left join
         purchaseorderline pol
         on po.purchaseid = ol.purchaseid
    where pol.purchaseid is null;

我強烈建議您不要將NOT IN與子查詢一起使用。 如果子查詢中的任何值返回NULL則它的行為不符合預期。 因為還有其他表達預期邏輯的方法,所以我的建議是習慣於使用這些其他方法來避免將來的錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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