1

如何在 MySQL 中实现此查询?

DELETE FROM design_adv  WHERE `id` 
NOT in ('s23_1359182369', 's23_1359187062', 's23_1359192556',
          's23_1358938356', 's6_1358663190') 
AND `id` NOT like 'c%';

我需要删除所有行,除非它们在上面给出的列表中或以字母“c”开头。

4

2 回答 2

0

我认为您的条件颠倒了-您正在指定要保留的条件。

试试这个。

从 design_adv 中删除id('s23_1359182369'、's23_1359187062'、's23_1359192556'、's23_1358938356'、's6_1358663190')或id类似 'c%'

于 2013-01-26T12:51:36.887 回答
0

不确定你真正想要做什么。但是根据您的查询,该表将删除in子句和wildcardinlike运算符中接受的每个 ID。任何 ID 都以c. 尝试这样做以保留除INcaluse 中的所有内容和LIKE..

您的问题已经说明了正确的查询:

我需要上面给出的列表中的所有delete行都以字母“c”开头。or

在您的表中执行大量删除之前,最好您可以在小提琴中真正尝试一下。

DELETE FROM demo  WHERE `id` 
 in ('s23_1359182369', 's23_1359187062',
        's23_1359192556',
          's23_1358938356', 's6_1358663190') 
OR `id` like 'c%';

  • 正如 OP 更新的问题:

我需要删除所有行*除非*它们是**上面给出的列表中以字母'c'开头。如果我们在这里使用OR,OP 的查询将删除所有行,因为不在列表中的任何 ID 也可以以c开头。任何不以c开头的 ID也可以在列表中。在这种情况下,您将需要使用AND

DELETE FROM demo  WHERE `id` 
NOT in ('s23_1359182369', 's23_1359187062',
        's23_1359192556',
          's23_1358938356', 's6_1358663190') 
AND `id` NOT like 'c%';

为了让您更好地了解,我使用了简单的数据点:

桌子:

| NUM | ID |
------------
|   1 | s1 |
|   2 | s2 |
|   3 | s3 |
|   4 | c1 |
|   5 | g1 |
|   6 | f1 |
|   7 | c3 |
|   8 | c2 |
|   9 | j1 |
|  10 | t1 |

删除查询:

DELETE FROM demo2  WHERE `id` 
 not in ('s1', 's2', 's3')
AND `id` not like 'c%';

结果,查询后:

| NUM | ID |
------------
|   1 | s1 |
|   2 | s2 |
|   3 | s3 |
|   4 | c1 |
|   7 | c3 |
|   8 | c2 |
于 2013-01-26T13:45:38.090 回答