[英]MySQL: SELECT all except when one column contains one particular value and another contains another specific value
所以我試圖從該表中執行一條選擇語句:
+--------+-------+--------+
| 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的結果將是整個表,除了這兩個倒數第二行。
我將如何構造該語句?
最簡單的方法是使用NOT
運算符來消除條件:
SELECT t.*
FROM this_table t
WHERE NOT ( t.letter = 'C' AND t.color = 'black' )
^^^
請注意,我們將條件括在括號中,以便將NOT應用於整個條件的結果。
但這並不考慮在letter
或color
列中可能的NULL值。
為了更精確地匹配規范(我們沒有關於是否允許使用NULL值的信息),我們可以使用MySQL NULL安全比較<=>
(spaceship)運算符代替equal =
comparison運算符。
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 )
從TableName中選擇*,其中Not Letter ='C'和Not Color ='black'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.