如何在SQL中排除特定记录?

pur*_*ppc 4 mysql sql record operators

我想排除在我的表中的记录,但它不是逻辑上的工作.这是我的Weapons表:

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
Run Code Online (Sandbox Code Playgroud)

我正在试图做的是排除记录Dragon Longsword具有StyleMelee.

这是我尝试过的:

SELECT *
FROM Weapons
Where Name!='Dragon Longsword' AND Style!='Melee';
Run Code Online (Sandbox Code Playgroud)

发生的事情是它没有显示任何包含Dragon Longsword或的记录Melee.我希望它不显示以下记录:

Dragon Longsword / 550 / Melee
Run Code Online (Sandbox Code Playgroud)

sst*_*tan 9

从逻辑上讲,你想要的是:

not (name == 'Dragon Longsword' and Style == 'Melee')
Run Code Online (Sandbox Code Playgroud)

应用简单的布尔逻辑(De Morgan定律,谢谢@Rocket),这可以转换为:

name != 'Dragon Longsword' or Style != 'Melee'
Run Code Online (Sandbox Code Playgroud)

所以正确的查询需要一个OR,而不是一个AND,因为它可能看起来不直观:

SELECT *
FROM Weapons
Where Name!='Dragon Longsword' OR Style!='Melee';
Run Code Online (Sandbox Code Playgroud)

  • PS它可能更冗长,但是`Where = Name ='Dragon Longsword'AND St​​yle ='Melee')`实际上是有效的SQL语法. (3认同)