如何选择两列不等于值的行?

问题描述 投票:3回答:4

我有一张桌子,每排有一个categorysubcategory

我想选择除特定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”子类别。

mysql sql where
4个回答
3
投票

那么为什么不试试NOT呢?

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

2
投票

您可以转换为下面的那个

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

1
投票

用OR替换第二个AND。

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

category <>'Fruit'和subcategory ='Orange'

category <>'Fruit'和subcategory ='Apple'

由于子类别不能同时为“橙色”和“Apple”,因此一个或另一个是假的,因此最外面的AND是假的。

您希望查找其中任何一种情况都为真的记录,因此WHERE子句应为:

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

1
投票

我不是100%根据你的要求 - 但我相信这正是你要找的:

SELECT * FROM table
WHERE NOT (category='Fruit' AND subcategory='Orange') AND NOT (category='Fruit' AND subcategory='Apple');
© www.soinside.com 2019 - 2024. All rights reserved.