Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何选择两列不等于一个值的行?_Mysql_Sql_Where - Fatal编程技术网

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'
吗?不管怎样,它都不起作用,因为它不包括任何属于“水果”的类别。我们可以保证子类别为“橙色”且子类别为“苹果”的行为零。不存在满足这两个条件的子类别值。我想如果我们将“
)和(
”替换为“
)或(
”,将返回您要查找的结果。是否要按它们的值排除特定行?很简单。谢谢。出于某种原因,我不知道您可以这样做。