我刚刚开始修改mysql。我有三张桌子。
PURCHASEORDERS
PURCHASEORDERLINE(HAS A FOREIGN KEY OF PURCHASEORDERID AND STOREROOM ID)
STOREROOM
我试图从采购订单中删除一行,并意识到这将是一个问题,因为它链接到采购订单行的外键。 现在,根据我的理解,我不得不说(用伪代码)
delete from purchaseorders where purchaseid not exists in
purchaseorderline.purchaseid
关于如何用mysql术语表达的任何建议?
答案 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
,则行为不符合预期。因为还有其他表达预期逻辑的方法,所以我的建议是习惯于使用其他方法来避免将来的错误。