MySQL - 删除多个条件

时间:2014-06-12 17:58:45

标签: mysql sql sql-delete

我有一个包含属性的数据库,我需要删除除3个“Inscription Agents”中任何一个“拥有”的所有属性。每个属性最多可包含2个“所有者”:数据库中的agent_inscripteur_1agent_inscripteur_2。 这是我的代码:

DELETE FROM inscriptions 
WHERE (agent_inscripteur_1 != 100520 OR agent_inscripteur_2 != 100520) 
      AND (agent_inscripteur_1 != 97927 OR agent_inscripteur_2 != 97927) 
      AND (agent_inscripteur_1 != 99237 OR agent_inscripteur_2 != 99237)

我认为在我的情况下发生的事情是AND之前的代码的第一部分在其余部分之前执行,因此除了第一个代理列出的属性之外的所有属性都被删除(到时候)它到达第二个和第三个代理,属性都消失了。)

有人可以指出我正确的方向吗?

谢谢!

4 个答案:

答案 0 :(得分:1)

如果您只是使用NOT IN代替

更改下面的条件,该怎么办?
DELETE FROM inscriptions 
WHERE agent_inscripteur_1 NOT IN (100520,97927,99237)
OR agent_inscripteur_2 NOT IN (100520,97927,99237)

答案 1 :(得分:1)

我认为你可以在这里使用不在运算符

DELETE FROM inscriptions WHERE agent_inscripteur_1 not in(100520,97927,99237) 
OR 
agent_inscripteur_2 not in(100520,97927,99237)

答案 2 :(得分:1)

我认为在尝试使用否定逻辑时最简单的方法是编写反向,然后用非编写前缀。确定关注的记录,然后不要删除它们,如下所示

DELETE FROM inscriptions 
WHERE not ( (agent_inscripteur_1 = 100520 OR agent_inscripteur_2 = 100520) 
      or (agent_inscripteur_1 = 97927 OR agent_inscripteur_2 = 97927) 
      or (agent_inscripteur_1 = 99237 OR agent_inscripteur_2 = 99237))

您可以将查询简化为类似

的内容
DELETE FROM inscriptions 
WHERE not (   agent_inscripteur_1 in (100520, 97927, 99237) 
           OR agent_inscripteur_2 in (100520, 97927, 99237) 
           )

答案 3 :(得分:0)

试试这个,

DELETE FROM inscriptions 
WHERE ( 
(agent_inscripteur_1 != 100520 AND agent_inscripteur_2 != 100520) 
OR (agent_inscripteur_1 != 97927 AND agent_inscripteur_2 != 97927)
OR (agent_inscripteur_1 != 99237 AND agent_inscripteur_2 != 99237)
)