因此,我正在尝试从此表中执行一条select语句:
+--------+-------+--------+
| LETTER | COLOR | NUMBER |
+--------+-------+--------+
| A | red | 1 |
| B | red | 2 |
| A | black | 3 |
| C | red | 4 |
| B | black | 5 |
| D | red | 6 |
| E | red | 7 |
| C | black | 8 |
| C | black | 9 |
| C | red | 10 |
+--------+-------+--------+
基本上,我想执行“ SELECT *”,但是跳过字母为C 且颜色为“黑色”的行。
换句话说,SELECT的结果将是整个表,除了那两个倒数第二行。
我将如何构造该语句?
答案 0 :(得分:2)
最直接的方法是使用 NOT
运算符来消除条件:
SELECT t.*
FROM this_table t
WHERE NOT ( t.letter = 'C' AND t.color = 'black' )
^^^
请注意,我们将条件括在括号中,以便将NOT应用于整个条件的结果。
但这并不能说明letter
或color
列中可能的NULL值。
为了更精确地匹配规范(没有关于是否允许使用NULL值的信息),我们可以使用MySQL NULL安全比较<=>
(太空飞船)运算符代替相等性=
运算符。
SELECT t.*
FROM this_table t
WHERE NOT ( t.letter <=> 'C' AND t.color <=> 'black' )
^^^
在括号内对AND
运算符的求反将是OR
,因此我们也可以这样写:
SELECT t.*
FROM this_table t
WHERE NOT ( t.letter <=> 'C' )
OR NOT ( t.color <=> 'black' )
^^^
如果我们要使用不等式比较运算符(<>
),则无需使用NOT
运算符就可以获得等效的结果...
SELECT t.*
FROM this_table t
WHERE ( t.letter <> 'C' OR t.letter IS NULL )
OR ( t.color <> 'black' OR t.color IS NULL )
答案 1 :(得分:0)
从TableName中选择* 没有字母=“ C”且没有颜色=“黑色”