删除所有行除条件外

时间:2016-04-19 19:22:53

标签: sql database where

FirstName Ben isAdmin为真时,我想删除表格 EXCEPT 中的所有行

这是我的SQL

DELETE FROM Table1
WHERE (FirstName <> 'Ben' AND isAdmin = 1);

但是,我的问题是当isAdmin为false时...它应该删除该行但它不会删除它。我的问题在这里是什么?

3 个答案:

答案 0 :(得分:2)

正确的SQL应该是

DELETE FROM Table1
WHERE (FirstName <> 'Ben' OR isAdmin = 0);

答案 1 :(得分:2)

你想:

DELETE FROM t
WHERE NOT (a AND b)

a AND b的否定是NOT a OR NOT b

所以你的查询应该是

DELETE FROM Table1
WHERE NOT (FirstName = 'Ben' AND isAdmin = 1);

DELETE FROM Table1
WHERE FirstName <> 'Ben' OR isAdmin <> 1);

我个人认为第一个选项更清楚地识别意图。两者之间不应有任何性能差异。

答案 2 :(得分:1)

如果要删除之外的所有行,如果这些条件为真,则可能需要使用NOT运算符,这可能比反转逻辑更好一些使用OR声明:

DELETE 
  FROM Table1
 WHERE NOT (FirstName = 'Ben' AND isAdmin = 1);

您可以see an interactive example here在查询之前演示表格内容:

enter image description here

并在查询之后:

enter image description here