MySQL:选择除列中具有指定值的行之外的所有行

时间:2014-04-27 12:22:20

标签: mysql sql database

我的表中的数据如下所示。

 dcno | etype | debit | credit |
------+-------+-------+--------+
  1   | sale  | 1200  | 1000   |
  2   | sale  | 1000  | 600    |
  3   | sale  | 1100  | 9001   |
  1   | purc  | 1274  | 1281   |
  4   | sale  | 1119  | 2811   |
  6   | sale  | 2345  | 233    |
  2   | purc  | 4467  | 121    |
  3   | sale  | 8885  | 1214   |

我想要的是一个不考虑该行的查询 拥有指定的dcnoetype。例如,如果我指定我不希望行具有dcno 1和etype的销售应返回以下内容:

 dcno | etype | debit | credit |
------+-------+-------+--------+
  2   | sale  | 1000  | 600    |
  3   | sale  | 1100  | 9001   |
  1   | purc  | 1274  | 1281   |
  4   | sale  | 1119  | 2811   |
  6   | sale  | 2345  | 233    |
  2   | purc  | 4467  | 121    |
  3   | sale  | 8885  | 1214   |

我尝试了以下

SELECT  *
FROM    pledger
WHERE   dcno <> 1 AND pledger.etype <> 'sale'

但这并没有奏效(如预期的那样)。任何人都可以告诉我,我怎么能实现这一目标?

1 个答案:

答案 0 :(得分:3)

您想要or

SELECT  *
FROM    pledger
WHERE   dcno <> 1 OR pledger.etype <> 'sale'

布尔逻辑表示NOT (X AND Y)在逻辑上等同于NOT X OR NOT Y。因此,NOT (dcno = 1 AND etype = 'sale')dcno <> 1 OR etype <> 'sale'。注意:这不会考虑NULL,但这与此无关。

以下是SQLFiddle