提问者:小点点

用于从表中删除全部的SQL查询,只保留必需的行


下面是MySQL中的test表。

fid sid data
A   B   67
C   D   54
E   F   53
G   H   26
I   J   23
K   L   17
M   N   64
O   P   83
Q   R   93
S   T   45
U   V   98
W   X   28
Y   Z   51

这个表每天都会得到更多的数据。 现在我的目标是在这里只保留几行,从这里删除所有其他内容。 现在要保留哪些行,必须从另一个表中获取。 举个例子,我们只需要保留其中的行(fid=I和sid=J)和(fid=S和sid=T)和(fid=C和sid=D)。 现在我需要查询,只保留这些行,从这里删除所有其他行。

我尝试了下面的查询,但它似乎不工作。

DELETE FROM `test` WHERE (`fid` != 'I' AND `sid` != 'J') AND (`fid` != 'S' AND `sid` != 'T') AND (`fid` != 'C' AND `sid` != 'D')

请帮帮我。


共2个答案

匿名用户

按如下方式设置条件:

DELETE FROM `test` 
WHERE (fid, sid) NOT IN (('I', 'J'), ('S', 'T'), ('C', 'D'))

请参阅演示。
结果:

| fid | sid | data |
| --- | --- | ---- |
| C   | D   | 54   |
| I   | J   | 23   |
| S   | T   | 45   |

如果要保留的行是由查询获取的,则改为:

DELETE FROM `test` 
WHERE (fid, sid) NOT IN (SELECT col1, col2 FROM .....)

匿名用户

这个问题我也得到了答案。

DELETE FROM `test` WHERE NOT (fid = 'I' AND sid = 'J') AND NOT (fid = 'S' AND sid = 'T') AND NOT (fid = 'C' AND sid = 'D')