【问题标题】:How can select rows where two columns do not equal a value?如何选择两列不等于值的行?
【发布时间】:2019-03-08 05:50:25
【问题描述】:

我有一个表格,其中每一行都有一个 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),因为我仍然想要“水果”类别并且我仍然想要“橙色”子类别。

【问题讨论】:

  • 我们可以保证子类别 = 'Orange' 且子类别 = 'Apple' 的行数为零。没有同时满足这两个条件的子类别的价值。我认为如果我们将“) and (”替换为“) or (”,您所追求的结果将会返回。
  • 您想按值排除特定行吗?

标签: mysql sql where


【解决方案1】:

那么为什么不试试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')

【讨论】:

  • 根据他想要的结果,subcategory = 'Apple'不应该是subcategory ='Banana'吗?
  • 无论如何它都不起作用,因为它不包括任何“水果”类别。 sqlfiddle.com/#!9/bd98a4/3
【解决方案3】:

将第二个 AND 替换为 OR。

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

category 'Fruit' 和 subcategory = 'Orange'

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

由于子类别不能同时是“Orange”和“Apple”,所以其中一个为假,所以最外面的AND为假。

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

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

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多