2015-11-05 42 views
0

是啊對不起,因爲貧窮的標題。SQL選擇哪裏不包括X只有

我用sqlfiddle創建了一個示例數據庫,但我很迷茫,我甚至無法開始查詢。 http://sqlfiddle.com/#!3/940b7d

在示例數據庫中,我需要所有具有設備並且可以擁有設備「CRAPY」的帳號,但前提是它也具有其他任何類型的設備。 因此,在下面的示例中,我將返回12345的值,因爲該帳戶確實具有設備,即使它也具有「CRAPY」 它也會返回44444和66666,因爲它具有設備。 它不會返回67891,因爲即使它有設備,它也只有「CRAPY」設備。

上帝,我真希望是明確的,

create table testdb 
(
    Account varchar(5), 
    Equipment varchar(5) 

) 
insert into testdb (Account,Equipment) values ('12345','CDG12') 
insert into testdb (Account,Equipment) values ('12345','CRAPY') 
insert into testdb (Account,Equipment) values ('12345','CDG12') 
insert into testdb (Account,Equipment) values ('12345','CDG12') 
insert into testdb (Account,Equipment) values ('12345','CDG12') 
insert into testdb (Account,Equipment) values ('67891','CRAPY') 
insert into testdb (Account,Equipment) values ('67891','CRAPY') 
insert into testdb (Account,Equipment) values ('67891','CRAPY') 
insert into testdb (Account,Equipment) values ('67891','CRAPY') 
insert into testdb (Account,Equipment) values ('67891','CRAPY') 
insert into testdb (Account,Equipment) values ('44444','YYYYY') 
insert into testdb (Account,Equipment) values ('66666','PPPPP') 
+0

提示:您可以使用'插入TESTDB(客戶設備)VALUES( '12345', 'CDG12'),( '12345', 'CRAPY')插入多行。 ..'。 – HABO

回答

-1

如果我們除去「CRAPY」記載,留下的任何賬戶都需要報(比「CRAPY」等設備)

select distinct account from testdb where Equipment not like 'CRAPY' 

如果你需要看他們有什麼設備,或需要的人以DOA快速健全性檢查:

select account, Equipment 
from testdb 
where account in 
    (
    select distinct account from testdb where Equipment not like 'CRAPY' 
    ) 
+0

這是最接近我實際已經想出的。 SELECT * FROM TESTDB 其中帳戶中 – scripter78

+0

沒有理由使用像這裏 (從那裏設備<>「CRAPY」組按帳戶 TESTDB 選擇賬戶) - 你想要一個平等的比賽不是一個模式匹配。此外,你不能拼出不同的。 – cliffordheath

+0

LIKE:作爲一名語言學家,當我可以的時候,我更喜歡用單詞而不是符號。 DISITINCT:感謝您指出我的錯字!修復。 – gadaju

0

使用DISTINCT查詢與設備<>「CRAPY」:

SELECT DISTINCT Account FROM testdb 
WHERE Equipment <> 'CRAPY' 

,或者如果你想所有的所有記錄的其他領域這樣的賬戶,使用EXISTS:

SELECT * FROM testdb 
WHERE EXISTS(
    SELECT * FROM testdb AS t1 
    WHERE testdb.Account = t1.Account 
     AND t1.Account <> 'CRAPY' 
) 
+0

不知道爲什麼這得到了投票,答案是正確的。 –

1

這應該是訣竅。

SELECT Account 
FROM testdb 
WHERE Equipment != 'CRAPY' 
GROUP BY Account 

您也可以替換 「<>」 在那裏我有 「!=」 如果你喜歡的語法。

編輯:很多其他的答案在這裏使用DISTINCT。作爲DBA,任何使用DISTINCT的查詢都不會通過我的代碼審查。這是懶惰的編程,即使它在邏輯上等同於使用GROUP BY。請避免懶惰的DISTINCT查詢。

+0

或者如果您使用的是ANSI標準的SQL實現(DB2,MS Access) - 標準沒有定義!= – cliffordheath

+1

標記爲T-SQL,所以我使用了最清晰的T-SQL語法。 – user5151179

1

我認爲你患有一個糟糕的問題陳述。更清晰的聲明是返回任何具有非「CRAPY」設備的帳號。 「CRAPY」設備的存在在很大程度上是無關緊要的。

你可以這樣做:

SELECT DISTINCT Account FROM testdb WHERE Equipment <> 'CRAPY' 

這將忽略「CRAPY」記錄,並只返回與非「CRAPY」設備(不論該帳戶是否具有或不具有「CRAPY」設備佔 - 我們不在乎)。