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);
完全有道理,我早该看到这个!
我知道 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);
完全有道理,我早该看到这个!