删除所有无法找到JOIN的行?

Dan*_*npe 2 sql sql-server select inner-join

我有这个问题:

SELECT Auctions.ID 
FROM Auctions
INNER JOIN Products ON Auctions.ProductID = Products.ID
Run Code Online (Sandbox Code Playgroud)

据我所知,如果我有拍卖:

ID | ProductID
1  |   12
Run Code Online (Sandbox Code Playgroud)

并且ProductID 12不在Products表中,因此不会选择该行.

如果我是对的,我想删除Products表上没有找到产品ID的所有行.(无法找到JOIN的产品)

我怎样才能做到这一点?

Joe*_*lli 5

DELETE FROM a
    FROM Auctions a
    WHERE NOT EXISTS(SELECT NULL FROM Products p WHERE p.ID = a.ProductID)
Run Code Online (Sandbox Code Playgroud)

  • @hunter:如果列允许空值,则NOT EXISTS应该表现更好.如果列不可为空,我们的答案应该完全相同.有关详细信息,请参阅[本文](http://sqlinthewild.co.za/index.php/2010/02/18/not-exists-vs-not-in/). (2认同)