select 两列不等于某个值的行怎么办?
How can select rows where two columns do not equal a value?
我有一个 table,其中每一行都有一个 category
和 subcategory
。
我想 select 除特定 category
和 subcategory
以外的所有行。
我的数据是这样的:
| 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');
我有一个 table,其中每一行都有一个 category
和 subcategory
。
我想 select 除特定 category
和 subcategory
以外的所有行。
我的数据是这样的:
| 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');