当FirstName
Ben 且isAdmin
为真时,我想删除表格 EXCEPT 中的所有行
这是我的SQL
DELETE FROM Table1
WHERE (FirstName <> 'Ben' AND isAdmin = 1);
但是,我的问题是当isAdmin
为false时...它应该删除该行但它不会删除它。我的问题在这里是什么?
答案 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在查询之前演示表格内容:
并在查询之后: