2

这是数据库中的数据

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

......

机器人 id 和 sequence_no 是该表中的主键

4

4 回答 4

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

于 2012-09-13T14:01:42.537 回答
0
SELECT * FROM table WHERE robot_id=ABC1234E AND sequence_no<>'1'

如果您有更复杂的查询,则可以根据您的 RDBMS 使用“减号”查询。喜欢这里:http ://www.techonthenet.com/sql/minus.php

于 2012-09-13T14:02:21.610 回答
0
SELECT *
FROM table
WHERE robot_id NOT LIKE 'ABC1234E' 
 OR sequence_no <> 1
于 2012-09-13T14:02:38.337 回答
0

只是为了好玩,您还可以使用(ANSI 标准)except子句(minus在 Oracle 中),它与您提出问题的方式“相似”:

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

不过,这可能会比其他解决方案慢 - 但我想我会为了完整性而包含它。

(请注意,字符文字必须用单引号括起来,而数字则不需要 - 就像您在问题中所做的那样)

于 2012-09-13T14:22:27.857 回答