2012-09-13 18 views
2

這是在數據庫獲取所有行不包括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 

.....

機器人ID和sequence_no是該表中

+0

的Oralce/SQL服務器/ MySQL的? – TechDo

+0

如果有robot_id ABC1234X和sequence_no 2,會發生什麼情況?包含還是排除? –

+0

@NikolaMarkovinović當問題是寫,我想他想包括它 – DonCallisto

回答

0

只是爲了好玩,你也可以使用(ANSI標準)except條款(minus在Oracle)的哪一種「類似於」你問的問題的方式:

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

雖然這可能會比其他解決方案更慢 - 但我認爲我會包括它的完整性。

(請注意,字符文字必須放在單引號和數字不 - 只是反過來,你在你的問題做了)

+0

除了不適用於mysql – user1663380

+0

@ user1663380:你應該提到你受限於使用MySQL –

+0

除了爲microsoft sql server工作嗎? – user1663380

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

+0

順便說一句robot_id ='ABC1234E'不是那裏唯一的數據。這是關於排除一行結果並檢索所有其他結果的想法 – user1663380

+0

@ user1663380:我想......那麼看看我的回答 – DonCallisto

+0

@ user1663380以及您發佈的新樣本數據,我更新了我的查詢,請參閱我的編輯和工作演示。 – Taryn

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

,如果你有一個更復雜的查詢,您可以使用您的具體RDBMS一個「減」的查詢。 喜歡這裏:http://www.techonthenet.com/sql/minus.php

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