我知道mysql中有一个DELETE FROM <table> WHERE <exprs>
命令,如果表达式有效,则从指定的表中删除元组。
然而,在采用仅保留表达式的补充时,总是使用demorgan法则成为一种负担。
我的问题是,mysql是否有KEEP ONLY
类型的命令?我试着到处寻找,但只是遇到了获取表达式补充然后使用DELETE命令的示例
答案 0 :(得分:2)
没有什么能像保持一样。然而,通常不像DeMorgan定律那样难以反转结果集。
想象一下,您有一些查询可以生成您想要保留的结果。请记住,表通常具有某种主键。你想要做的是选择那些列。通常,这是一个代理键(ID列),它就像选择一列一样简单:
SELECT ID FROM table WHERE X
您可以做的是嵌套查询:
DELETE FROM table
WHERE ID NOT IN (SELECT ID FROM table WHERE X)
将它写为JOIN而不是NOT IN也是很常见的,但是由于这个答案的重点是简化生成此代码的逻辑过程,我将把它作为读者的练习。但是,我将补充说,如果您的主键有多个列,则可能必须编写该JOIN代码。
答案 1 :(得分:1)
我刚刚想出了另一种构建“KEEP ONLY”类型命令的方法!
说你想要这样的东西:
KEEP the tuples that satisfy <massive_expression>
你要做的就是在DELETE命令中否定<massive_expression>
,如下所示:
DELETE FROM table
WHERE ! (massive_expression);
这很有道理,我以前应该看过这个!