这是数据库中的数据
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是此表中的主键
答案 0 :(得分:2)
您将使用您的查询,只需更改WHERE
子句即表示您想要所有robot_id=ABC1234E
和WHERE 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
但是,如果您的数据包含的额外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)
答案 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;
这可能会比其他解决方案慢 - 但我认为我会将其包含在内以便完整。
(请注意,字符文字必须用单引号括起来,数字不能 - 就像你在问题中那样反过来)