mysql "KEEP ONLY" 命令?

mysql "KEEP ONLY" command?

我知道 mysql 中有一个 DELETE FROM <table> WHERE <exprs> 命令,如果表达式有效,它会从指定的 table 中删除元组。

然而,在取keep only表达式的补码时总是使用德摩根定律成为一种负担。

我的问题是,是否有 mysql 的 KEEP ONLY 类型的命令?表达式的补集,然后使用 DELETE 命令。

没有什么比只保留更好的了。但是,反转结果集通常不像 DeMorgan 定律那么难。

假设您有一些查询来生成您想要保留的结果。请记住,表通常具有某种主键。您要做的是 select 那些列。通常,这是一个代理键(ID 列),它就像 selecting 列一样简单:

SELECT ID FROM table WHERE X

您可以做的是嵌套查询:

DELETE FROM table
WHERE ID NOT IN (SELECT ID FROM table WHERE X)

将其写成 JOIN 而不是 NOT IN 也很常见,但由于这个答案的全部意义在于简化生成此代码的逻辑过程,我将把它留作练习reader。但是,我要补充一点,如果您的主键有多于一列,您可能必须编写该 JOIN 代码。

我刚刚想出了另一种构建 "KEEP ONLY" 类型命令的方法!

说你想要这样的东西:

KEEP the tuples that satisfy <massive_expression>

你所要做的就是在 DELETE 命令中取消 <massive_expression>,像这样:

DELETE FROM table
WHERE ! (massive_expression);

完全有道理,我早该看到这个!