select 两列不等于某个值的行怎么办?

How can select rows where two columns do not equal a value?

我有一个 table,其中每一行都有一个 categorysubcategory

我想 select 除特定 categorysubcategory 以外的所有行。

我的数据是这样的:

| category | subcategory |
|----------|-------------|
| Color    | Orange      |
| Fruit    | Apple       |
| Fruit    | Orange      |
| Fruit    | Banana      |

我希望我的结果如下所示:

| category | subcategory |
|----------|-------------|
| Color    | Orange      |
| Fruit    | Banana      |

这是我试过但显然行不通的方法:

SELECT *
FROM table
WHERE
    (category <> 'Fruit' AND subcategory = 'Orange') and
    (category <> 'Fruit' AND subcategory = 'Apple')

我似乎想不出如何让它发挥作用。 SQL 有办法说 where not (this and this) 因为我仍然想要 "Fruit" 类别并且我仍然想要 "Orange" 子类别。

您可以转换为下面的

SELECT *
FROM table
WHERE
    (category <> 'Fruit' AND subcategory = 'Orange') OR
    (category = 'Fruit' AND subcategory = 'Banana')

将第二个 AND 替换为 OR。

您的查询正在查找满足以下两个条件的记录:

类别 <> 'Fruit' 和子类别 = 'Orange'

类别 <> 'Fruit' 和子类别 = 'Apple'

由于subcategory不能同时为'Orange'和'Apple',其中一个为假,所以最外层的AND为假。

您想查找其中任一情况为真的记录,因此 WHERE 子句应为:

WHERE
(category <> 'Fruit' AND subcategory = 'Orange') OR
(category <> 'Fruit' AND subcategory = 'Apple')

那为什么不试试 NOT 呢?

SELECT *
FROM yourtable
WHERE NOT (category = 'Fruit' AND subcategory IN ('Orange', 'Apple'))

我不是 100% 了解您的要求 - 但我相信这就是您要找的:

SELECT * FROM table
WHERE NOT (category='Fruit' AND subcategory='Orange') AND NOT (category='Fruit' AND subcategory='Apple');