我有一张桌子,每排有一个category
和subcategory
。
我想选择除特定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”子类别。
那么为什么不试试NOT呢?
SELECT *
FROM yourtable
WHERE NOT (category = 'Fruit' AND subcategory IN ('Orange', 'Apple'))
您可以转换为下面的那个
SELECT *
FROM table
WHERE
(category <> 'Fruit' AND subcategory = 'Orange') OR
(category = 'Fruit' AND subcategory = 'Banana')
用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')
我不是100%根据你的要求 - 但我相信这正是你要找的:
SELECT * FROM table
WHERE NOT (category='Fruit' AND subcategory='Orange') AND NOT (category='Fruit' AND subcategory='Apple');