删除除条件之外的所有行

Remove all rows Except condition

我想从 table EXCEPT 中删除所有行,当 FirstNameBenisAdmin 是真的

这是我的 SQL

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

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

正确的SQL应该是

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

你想要:

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);

我个人认为第一个选项更清楚地表明了意图。两者之间应该没有任何性能差异。

如果要删除所有满足这些条件的 除了 之外的行,您可能希望使用 NOT 运算符,这可能有点读起来比使用 OR 语句反转逻辑更好:

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

你可以see an interactive example here在查询前显示table的内容:

查询后: