选择MySQL查询中不匹配的所有行

时间:2015-08-06 15:09:28

标签: mysql

我想从表中获取除查询中的行之外的所有行。 更新:根据makeModelDescription,firstRegistration和mileage三个属性,需要在结果集中添加或删除行。仅当所有三个值与行匹配时,才应该是结果集的一部分。 WHERE子句最多包含20个条件。因此我尝试了

SELECT * 
FROM cars 
WHERE (makeModelDescription<>'Seat Arosa 2.0 Stella' AND 
       firstRegistration='EZ 03/2005' AND mileage='101.000 km') OR 
      (makeModelDescription<>'Seat Arosa 3.0 Stella' AND 
       firstRegistration='EZ 03/2005' AND mileage='101.000 km')

带有样本表:

enter image description here

但不是得到预期的结果:

  • 宝马X5 4.4 i ausrs手
  • Corvette C5 Cabrio Seat
  • Arosa 4.0 Stella

我得到了结果:

enter image description here

任何有更多经验的人都可以支持并帮助制定正确的查询。

2 个答案:

答案 0 :(得分:0)

事实上,您正在使用SELECT

执行此操作
SELECT * 
FROM cars 
WHERE firstRegistration='EZ 03/2005' AND mileage='101.000 km'

因为你在两个模型之间加了OR

因此,您只需要查看它们与您所引用的模型的不同之处:

SELECT * 
FROM cars 
WHERE (makeModelDescription <>'Seat Arosa 2.0 Stella' AND 
       makeModelDescription <>'Seat Arosa 3.0 Stella')

已编辑:

SELECT * 
FROM cars 
WHERE (makeModelDescription <>'Seat Arosa 2.0 Stella' AND 
       makeModelDescription <>'Seat Arosa 3.0 Stella')  OR 
        firstRegistration <>'EZ 03/2005' OR
        mileage<>'101.000 km'

答案 1 :(得分:0)

您的WHERE条件在逻辑上是错误的,

(
    makeModelDescription<>'Seat Arosa 2.0 Stella' 
    AND firstRegistration='EZ 03/2005' 
    AND mileage='101.000 km'
)

    OR 

(
    makeModelDescription<>'Seat Arosa 3.0 Stella' 
    AND firstRegistration='EZ 03/2005' 
    AND mileage='101.000 km'
)

现在发生的情况是,当firstRegistration等于EZ 03/2005时(以及mileage等于101.000km),两个条件都成立。您应该做的只是省略makeModelDescription等于Seat Arosa 2.0 Stella OR Seat Arosa 3.0 Stella的记录。所以你的查询应该如下,

SELECT * 
FROM cars 
WHERE 
makeModelDescription <>'Seat Arosa 2.0 Stella'
AND 
makeModelDescription <>'Seat Arosa 3.0 Stella'