Mysql 如何选择两列不等于一个值的行?
我有一个表,其中每行都有一个Mysql 如何选择两列不等于一个值的行?,mysql,sql,where,Mysql,Sql,Where,我有一个表,其中每行都有一个类别和子类别 我想选择除特定的类别和子类别之外的所有行 我的数据如下所示: | category | subcategory | |----------|-------------| | Color | Orange | | Fruit | Apple | | Fruit | Orange | | Fruit | Banana | | category | subcategory | |-------
类别
和子类别
我想选择除特定的类别
和子类别
之外的所有行
我的数据如下所示:
| category | subcategory |
|----------|-------------|
| Color | Orange |
| Fruit | Apple |
| Fruit | Orange |
| Fruit | Banana |
| category | subcategory |
|----------|-------------|
| Color | Orange |
| Fruit | Banana |
我希望我的结果如下所示:
| 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是否有办法说
哪里没有(这个和这个)
,因为我仍然想要“水果”类别,我仍然想要“橙色”子类别。您可以转换为下面的类别
SELECT *
FROM table
WHERE
(category <> 'Fruit' AND subcategory = 'Orange') OR
(category = 'Fruit' AND subcategory = 'Banana')
选择*
从桌子上
哪里
(类别“水果”和子类别=“橙色”)或
(类别=‘水果’和子类别=‘香蕉’)
用OR替换第二个和
您的查询正在查找以下两项均为真的记录:
类别“水果”和子类别=“橙色”
类别“水果”和子类别=“苹果”
由于子类别不能同时为“Orange”和“Apple”,因此其中一个或另一个为false,因此最外层的和为false
您希望查找其中一种情况为真的记录,因此where子句应为:
WHERE
(category <> 'Fruit' AND subcategory = 'Orange') OR
(category <> 'Fruit' AND subcategory = 'Apple')
在哪里
(类别“水果”和子类别=“橙色”)或
(类别“水果”和子类别=“苹果”)
那么为什么不试试不呢
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');
subcategory='Apple'
不应该基于他想要的结果而subcategory='Banana'
吗?不管怎样,它都不起作用,因为它不包括任何属于“水果”的类别。我们可以保证子类别为“橙色”且子类别为“苹果”的行为零。不存在满足这两个条件的子类别值。我想如果我们将“)和(
”替换为“)或(
”,将返回您要查找的结果。是否要按它们的值排除特定行?很简单。谢谢。出于某种原因,我不知道您可以这样做。