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

时间:2019-03-07 21:38:22

标签: mysql sql where

我有一个表,其中每行都有一个/home/user/websites/test:/var/www:cached category

除了特定的subcategorycategory之外,我想选择所有行。

我的数据如下:

subcategory

我希望我的结果看起来像这样:

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

这是我尝试过的方法,但显然不起作用:

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

我似乎无法全神贯注于如何使它工作。 SQL是否有一种说法SELECT * FROM table WHERE (category <> 'Fruit' AND subcategory = 'Orange') and (category <> 'Fruit' AND subcategory = 'Apple') ,因为我仍然想要“水果”类别,而我仍然想要“橙色”子类别。

4 个答案:

答案 0 :(得分:3)

那为什么不尝试NOT?

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

答案 1 :(得分:2)

您可以转换为下面的一个

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

答案 2 :(得分:1)

用OR替换第二个AND。

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

类别<>“水果”和子类别=“橙色”

类别<>“水果”和子类别=“苹果”

由于子类别不能同时是'Orange'和'Apple',所以一个或另一个为假,因此最外面的AND为假。

您要查找其中两种情况均成立的记录,因此WHERE子句应为:

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

答案 3 :(得分:1)

我不是100%满足您的要求-但我相信这就是您想要的:

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