如何在 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”开头。
如何在 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”开头。
我认为您的条件颠倒了-您正在指定要保留的条件。
试试这个。
从 design_adv 中删除id
('s23_1359182369'、's23_1359187062'、's23_1359192556'、's23_1358938356'、's6_1358663190')或id
类似 'c%'
不确定你真正想要做什么。但是根据您的查询,该表将删除in
子句和wildcard
inlike
运算符中接受的每个 ID。任何 ID 都以c
. 尝试这样做以保留除IN
caluse 中的所有内容和LIKE
..
您的问题已经说明了正确的查询:
我需要上面给出的列表中的所有
delete
行都以字母“c”开头。or
在您的表中执行大量删除之前,最好您可以在小提琴中真正尝试一下。
DELETE FROM demo WHERE `id`
in ('s23_1359182369', 's23_1359187062',
's23_1359192556',
's23_1358938356', 's6_1358663190')
OR `id` like 'c%';
我需要删除所有行*除非*它们是*在*上面给出的列表中或以字母'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 |