删除除条件之外的所有行
Remove all rows Except condition
我想从 table EXCEPT 中删除所有行,当 FirstName
是 Ben 和 isAdmin
是真的
这是我的 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的内容:
查询后:
我想从 table EXCEPT 中删除所有行,当 FirstName
是 Ben 和 isAdmin
是真的
这是我的 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的内容:
查询后: