获取排除SQL结果集的所有行

时间:2012-09-13 13:59:51

标签: mysql sql

这是数据库中的数据

robot_id    sequence_no x            y
ABC1234E    1         8888         9999
ABC1234E    2         8888         9999
ABC1234E    3         8888         9999 
ABC1234E    4         8888         9999
 BBC1        1        8888         9999
  BBC2      1         8888         9999
  BBC2      2         8888         9999
  BBC3      1         8888         9999

.....

我希望排除此结果集:

SELECT * FROM table WHERE robot_id=ABC1234E AND sequence_no='1'

这是我应该得到的:

  robot_id      sequence_no           x             y
ABC1234E                2         8888         9999
ABC1234E                3         8888         9999 
ABC1234E                4         8888         9999
    BBC1        1         8888         9999
  BBC2      1         8888         9999
  BBC2      2         8888         9999
  BBC3      1         8888         9999

.....

robot id和sequence_no是此表中的主键

4 个答案:

答案 0 :(得分:2)

您将使用您的查询,只需更改WHERE子句即表示您想要所有robot_id=ABC1234EWHERE sequence_no does not equal = 1。如果您只使用一个robot_id值:

所以你的查询将是:

SELECT *
FROM yourTable
WHERE robot_id='ABC1234E' 
   AND sequence_no !=1

或者

SELECT *
FROM yourTable
WHERE robot_id='ABC1234E' 
   AND sequence_no <> 1

请参阅SQL Fiddle with Demo

但是,如果您的数据包含的额外robot_id值超出了您的使用范围:

select *
from yourtable t1
where not exists (SELECT sequence_no
                FROM yourTable t2
                WHERE robot_id='ABC1234E' 
                  and sequence_no = 1
                   and t1.robot_id = t2.robot_id
                   and t1.sequence_no = t2.sequence_no)

请参阅SQL Fiddle with Demo

答案 1 :(得分:0)

SELECT * FROM table WHERE robot_id=ABC1234E AND sequence_no<>'1'

如果你有一个更复杂的查询,你可以根据你的RDBMS使用'减'查询。 像这里:http://www.techonthenet.com/sql/minus.php

答案 2 :(得分:0)

SELECT *
FROM table
WHERE robot_id NOT LIKE 'ABC1234E' 
 OR sequence_no <> 1

答案 3 :(得分:0)

只是为了它的乐趣,您还可以使用(ANSI标准)except子句(Oracle中的minus),这类似于您提出问题的方式:

select *
from the_table
except
select *
from the_table
where robot_id = 'ABC1234E' 
  and sequence_no = 1;

这可能会比其他解决方案慢 - 但我认为我会将其包含在内以便完整。

(请注意,字符文字必须用单引号括起来,数字不能 - 就像你在问题中那样反过来)