Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.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_Ms Access - Fatal编程技术网

Mysql 排除基于两列中具有特定值的多个条件的记录

Mysql 排除基于两列中具有特定值的多个条件的记录,mysql,sql,ms-access,Mysql,Sql,Ms Access,信息: 我有一个表,有三列:Book、Store_1和Store_2。我使用MS Access,但也熟悉MySQL _______________________________________________ Book | Store_1 | Store_2 | Lord of the Rings | Paper | | Ender's Game | Digital | Digital |

信息:

我有一个表,有三列:Book、Store_1和Store_2。我使用MS Access,但也熟悉MySQL

_______________________________________________
      Book        |   Store_1   |   Store_2   |
Lord of the Rings |   Paper     |             |
Ender's Game      |   Digital   |   Digital   |
Mistborn          |   Digital   |             |
Spines            |             |   Paper     |
Grapes of Wrath   |             |   Digital   |
Artemis Fowl      |             |             |
Redwall           |   Paper     |   Paper     |
Perloo the Bold   |   Digital   |   Paper     |
_______________________________________________  
问题

我需要编写一个查询,如果行满足以下任何条件,则该查询将排除该行:

  • 排除存储区2的单元格为空的行。即使存储1不为null,也可以基于存储2为null来排除此行
  • 排除存储区1和存储区2的单元格均为“数字”的行。对于存储1和存储2具有“数字”的任何记录,请将其排除在外
  • 排除存储区1和存储区2的单元格均为“Null”的行。对于同一记录的存储区1和存储区2均为空的行,请将其排除
运行查询后,该表应如下所示:

_______________________________________________
      Book        |   Store_1   |   Store_2   |
Spines            |             |   Paper     |
Grapes of Wrath   |             |   Digital   |
Redwall           |   Paper     |   Paper     |
Perloo the Bold   |   Digital   |   Paper     |
_______________________________________________
我尝试过的

我要诚实地说,我不知道如何将这三个标准结合到一个声明中。最接近我的。。。与我想要的正好相反,这就是:

SELECT *
FROM Books
WHERE (Store_2 IS NULL) OR (Store_1 AND Store_2 = "Digital") OR (Store_1 AND Store_2 IS NULL)
;
它给了我我不想要的书,这是一个开始,但我不知道如何扭转它。在WHERE之后添加NOT IN时出现语法错误。感谢您在正确的道路上提供的任何帮助、建议或指导。

我会这样做:

SELECT *
FROM Books
WHERE (Store_2 IS NOT NULL) AND (Store_1 <> 'Digital' OR Store_2 <> 'Digital') AND (Store_1 ÌS NOT NULL OR Store_2 IS NOT NULL)
;
选择*
从书本上
其中(存储区2不为空)和(存储区1“数字”或存储区2“数字”)和(存储区1不为空或存储区2不为空)
;
这个我可以做到:

SELECT *
FROM Books
WHERE (Store_2 IS NOT NULL) AND (Store_1 <> 'Digital' OR Store_2 <> 'Digital') AND (Store_1 ÌS NOT NULL OR Store_2 IS NOT NULL)
;
选择*
从书本上
其中(存储区2不为空)和(存储区1“数字”或存储区2“数字”)和(存储区1不为空或存储区2不为空)
;

第二个
NULL
条件是多余的,因为只有在第一个条件为真时,它才能为真。因此,您可以将表达式简化为:

SELECT *
FROM Books
WHERE Store_2 IS NOT NULL AND NOT (Store_2 <=> 'Digital' AND Store_1 <=> 'Digital')

第二个
NULL
条件是多余的,因为只有在第一个条件为真时,它才能为真。因此,您可以将表达式简化为:

SELECT *
FROM Books
WHERE Store_2 IS NOT NULL AND NOT (Store_2 <=> 'Digital' AND Store_1 <=> 'Digital')

@zip很接近,但在第二个位置有一个隐藏的反勾号
Store_1不为NULL
,任何不等于'digital'或NULL的存储的空安全比较是检查
Store_1
是否为NULL,因为由于第一个条件,Store_2不能为NULL

现在,如果满足其中一个条件,将显示数据

选择*
从书本上
其中存储区_2不为空
及(
存储单元1“数字”
或存储_2“数字”
或存储区_1不为空
);
may enlight OP on Get null safe in
Ms Access

最后一句话

带有数字的字段名(特别是按顺序排列的),闻起来像是糟糕的规范化。通常,你会有一列商店编号,这使你可以自由地拥有无限数量的商店


对于以后在列中显示存储编号的数据,您可以

@zip已关闭,但在第二行中有一个隐藏的反勾号
store_1不为NULL
,对于任何不等于'digital'或NULL的存储,空值安全比较是检查
store_1
是否为NULL,因为由于第一个条件,store_2不能为NULL

现在,如果满足其中一个条件,将显示数据

选择*
从书本上
其中存储区_2不为空
及(
存储单元1“数字”
或存储_2“数字”
或存储区_1不为空
);
may enlight OP on Get null safe in
Ms Access

最后一句话

带有数字的字段名(特别是按顺序排列的),闻起来像是糟糕的规范化。通常,你会有一列商店编号,这使你可以自由地拥有无限数量的商店


对于以后在列中显示带有存储编号的数据,您可以

此处我看不到存储3此处我看不到存储3感谢您花时间回复。试一试你的解决方案,你会得到《指环王》和《安德的游戏》的台词。我意识到我应该更清楚我的排除标准排除存储区1和存储区2的单元格均为“数字”的行。我的意思是排除两个单元格同时是“数字”的记录。-排除存储区1和存储区2的单元格均为“Null”的行。同样,对于单个记录,排除存储区1和存储区2的单元格为“Null”的记录。@user12475155 my bad-我忘了允许空安全比较。我已经更新了查询并添加了一个工作演示。抱歉…尼克,你不会碰巧知道Access中的空安全等于运算符吧?我知道我说我也知道MySQL,但不幸的是,我从未使用过它,也无法在网上找到任何关于如何将其转换为Access的信息。除此之外,您的查询是正确的,我知道哪里出了问题。@user12475155我认为access没有。您需要使用
其中Store_2不为空且不为空(Store_2='Digital'且Store_2不为空,Store_1='Digital'且Store_1不为空)
感谢您花时间回复。试一试你的解决方案,你会得到《指环王》和《安德的游戏》的台词。我意识到我应该更清楚我的排除标准排除存储区1和存储区2的单元格均为“数字”的行。我的意思是排除两个单元格同时是“数字”的记录。-排除存储区1和存储区2的单元格均为“Null”的行。同样,对于单个记录,排除存储区1和存储区2的单元格为“Null”的记录。@user12475155 my bad-我忘了允许空安全比较。我已经更新了查询并添加了一个工作演示。抱歉…尼克,你不会碰巧知道Access中的空安全等于运算符吧?我知道我说我也知道MySQL,但不幸的是,我从未使用过它,也无法在网上找到任何关于如何将其转换为Access的信息。除此之外,您的查询是正确的,我知道哪里出了问题。@user12475155我认为access没有。您需要使用
,其中Store_2不为空且不为空(Store_2='Digital'