删除具有链接到另一个表的键作为外键的表的行

时间:2019-03-23 08:26:53

标签: mysql sql database

我刚刚开始修改mysql。我有三张桌子。

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

我试图从采购订单中删除一行,并意识到这将是一个问题,因为它链接到采购订单行的外键。 现在,根据我的理解,我不得不说(用伪代码)

    delete from purchaseorders where purchaseid not exists in 
    purchaseorderline.purchaseid

关于如何用mysql术语表达的任何建议?

2 个答案:

答案 0 :(得分:2)

不在其中使用

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

答案 1 :(得分:2)

您似乎想要一个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与子查询一起使用。如果子查询中的 any 值返回NULL,则行为不符合预期。因为还有其他表达预期逻辑的方法,所以我的建议是习惯于使用其他方法来避免将来的错误。