下面是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')
请帮帮我。
按如下方式设置条件:
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')