Mysql 排除基于两列中具有特定值的多个条件的记录
信息: 我有一个表,有三列:Book、Store_1和Store_2。我使用MS Access,但也熟悉MySQLMysql 排除基于两列中具有特定值的多个条件的记录,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 |
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 inMs Access
最后一句话
带有数字的字段名(特别是按顺序排列的),闻起来像是糟糕的规范化。通常,你会有一列商店编号,这使你可以自由地拥有无限数量的商店
对于以后在列中显示存储编号的数据,您可以@zip已关闭,但在第二行中有一个隐藏的反勾号
store_1不为NULL
,对于任何不等于'digital'或NULL的存储,空值安全比较是检查store_1
是否为NULL,因为由于第一个条件,store_2不能为NULL
现在,如果满足其中一个条件,将显示数据
选择*
从书本上
其中存储区_2不为空
及(
存储单元1“数字”
或存储_2“数字”
或存储区_1不为空
);
may enlight OP on Get null safe inMs 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'