2015-10-06 83 views
4

我想排除我的表中的一條記錄,但它邏輯上不工作。這裏是我的Weapons表:如何排除SQL中的特定記錄?

Name/DPS/Style 

Noxious Bow/1000/Range 
Chaotic Staff/800/Magic 
Armadyl Crossbow/750/Range 
Saradomin Godsword/600/Melee 
Dragon Longsword/600/Magic 
Dragon Longsword/550/Melee 
Elder Shortbow/500/Range 

我試圖做的是排除其中有MeleeStyle記錄Dragon Longsword

這裏是我的嘗試:

SELECT * 
FROM Weapons 
Where Name!='Dragon Longsword' AND Style!='Melee'; 

正在發生的事情是,它不顯示包含Dragon LongswordMelee任何記錄。我希望它不是隻顯示以下記錄:

Dragon Longsword/550/Melee 

回答

9

從邏輯上講,你要的是:

not (name == 'Dragon Longsword' and Style == 'Melee') 

運用簡單的布爾邏輯(De Morgan's laws,謝謝@Rocket),這樣可以被翻譯成:

name != 'Dragon Longsword' or Style != 'Melee' 

所以正確的查詢將需要一個OR,不是一個AND,因爲直觀的,因爲它看起來:

SELECT * 
FROM Weapons 
Where Name!='Dragon Longsword' OR Style!='Melee'; 
+1

[德摩根定律(https://en.wikipedia.org/wiki/De_Morgan%27s_laws),FTW! –

+0

@火箭Hazmat:感謝您提供真實姓名。從來不知道它叫做什麼:) – sstan

+0

我只是碰巧記得,從我早期的CS課程:-) –

2
SELECT * 
FROM Weapons 
Where Name!='Dragon Longsword' OR Style!='Melee'