如何在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”开头。
答案 0 :(得分:0)
我认为你已经把条件反转了 - 你指的是你要保留的条件。
试试这个。
DELETE FROM design_adv WHERE id
in('s23_1359182369','s23_1359187062','s23_1359192556','s23_1358938356','s6_1358663190')
或id
喜欢'c%'
答案 1 :(得分:0)
不确定你真正想要做什么。但是根据您的查询,该表将删除in
子句和wildcard
运算符中like
的每个ID接受。任何ID都以c
开头。试着这样做除了IN
caluse和LIKE
..
您的问题已经说明了正确的查询:
我需要
delete
or
上面列出的所有 行DELETE FROM demo WHERE `id` in ('s23_1359182369', 's23_1359187062', 's23_1359192556', 's23_1358938356', 's6_1358663190') OR `id` like 'c%';
字母'c'。
在你的牌桌上进行大量删除之前,最好能在小提琴中尝试一下。
DELETE FROM demo WHERE `id`
NOT in ('s23_1359182369', 's23_1359187062',
's23_1359192556',
's23_1358938356', 's6_1358663190')
AND `id` NOT like 'c%';
我需要删除所有行 * 除非 *他们 * *上面给出的列表或以字母'c'开头。如果我们在这里使用 OR ,OP的查询将删除所有行,因为列表中没有的任何ID也可以以 c 开头。任何不以 c 开头的ID也可以在列表中。在这种情况下,您需要使用 AND 。
| 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 |
结果,在查询之后:
{{1}}