两个条件在同一列上

时间:2013-01-26 12:11:38

标签: mysql sql where-clause

如何在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”开头。

2 个答案:

答案 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%';

  • AS OP更新了问题:

  

我需要删除所有行 * 除非 *他们 * *上面给出的列表以字母'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}}