我有一个表,其中每行都有一个/home/user/websites/test:/var/www:cached
和category
。
除了特定的subcategory
和category
之外,我想选择所有行。
我的数据如下:
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')
,因为我仍然想要“水果”类别,而我仍然想要“橙色”子类别。
答案 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');