簡體   English   中英

MySQL:全選,除了當一列包含一個特定值而另一列包含另一特定值時

[英]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應用於整個條件的結果。

但這並不考慮在lettercolor列中可能的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM