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

使用时获取错误的结果集!=关于MySQL练习中的日期

使用时获取错误的结果集!=关于MySQL练习中的日期,mysql,sql,database,Mysql,Sql,Database,我正在做一个sql练习,上面说: 编写一条SQL语句,以显示那些不是在2012-09-10日期发布的、由ID为505及以下的销售人员发布的订单,或者那些采购金额为1000.00及以下的订单。 嗯,当我看我的查询和正确答案时,它们在逻辑上似乎是平行的,但我得到了错误的结果集。有人能帮我理解为什么我的问题是错误的吗 我的问题是: SELECT * FROM orders WHERE ((ord_date != '2012-09-10' AND salesman_id <= 505) OR pu

我正在做一个sql练习,上面说:

编写一条SQL语句,以显示那些不是在2012-09-10日期发布的、由ID为505及以下的销售人员发布的订单,或者那些采购金额为1000.00及以下的订单。

嗯,当我看我的查询和正确答案时,它们在逻辑上似乎是平行的,但我得到了错误的结果集。有人能帮我理解为什么我的问题是错误的吗

我的问题是:

SELECT * FROM orders WHERE
((ord_date != '2012-09-10' AND salesman_id <= 505) OR
purch_amt <= 1000);
下面首先是我的结果集的屏幕截图,然后是正确的结果集。我理解我的结果集是如何错误的,我只是不理解为什么我的查询会得到这些信息

根据您的查询

SELECT * FROM orders WHERE
((ord_date != '2012-09-10' AND salesman_id <= 505) OR
purch_amt <= 1000);
,其中
条件等于
(ord_date!=“2012-09-10”或saller_id在您的查询中,在正确答案的对面,NOT并没有包含所有条件。到目前为止,似乎很明显,是的

但结果是您返回了两个

  • 满足第一个条件的所有记录(即使不满足第二个条件的记录)
  • 满足第二个条件的所有记录(即使不满足第一个条件的记录)
因此,结果集不仅包括预期(正确答案)记录,还包括仅满足两个条件之一的记录


阅读@Philipxy的评论后进行编辑

我同意这项工作的提法有些含糊不清。

但我选择用“正确答案”来推理,这清楚地显示了所需的内容。在此基础上,我们可以理解另一个查询是如何失败的。

您想知道,为什么即使过滤了结果,也会在结果中得到Salesian_id>505?在您的练习中,有3个条件需要合并。因此,您还应该澄清哪两个条件是(1,2)还是(2,3)你对
的提问是正确的,我不认为你的答案是错误的——如果这就是问题的全部内容,而且这种措辞在过去从未明确过——英语不清楚。请在你给出输出时给出输入。如果原始作业是英语的,请给出准确的答案,如果翻译了,请将其放在括号内将论文翻译成英文,以展示它是如何在原语中解析的。“正确”的答案并不反映英文的意思,而英文对“不”的意思也不明确。我明白我在逻辑上弄错了。这个答案很好,而且是描述性的。谢谢!
SELECT * FROM orders WHERE
((ord_date != '2012-09-10' AND salesman_id <= 505) OR
purch_amt <= 1000);
SELECT * FROM orders WHERE NOT
((ord_date = '2012-09-10' AND salesman_id > 505)
OR purch_amt > 1000.00);
SELECT * FROM orders 
WHERE ord_date != '2012-09-10' AND (salesman_id <= 505 OR purch_amt <= 1000.00);