我正在做一个SQL练习,说:

编写一条SQL语句,以显示在2012年9月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 NOT
((ord_date = '2012-09-10' AND salesman_id > 505)
OR purch_amt > 1000.00);


下面首先是我的结果集的屏幕截图,然后是正确的结果集。我了解我的结果集有错,我只是不明白为什么我的查询会得到该信息。

mysql - 在MySQL练习中对日期使用!=时得到错误的结果集-LMLPHP

mysql - 在MySQL练习中对日期使用!=时得到错误的结果集-LMLPHP

最佳答案

根据您的查询,

SELECT * FROM orders WHERE
((ord_date != '2012-09-10' AND salesman_id <= 505) OR
purch_amt <= 1000);


您会获得ord_no 70007的行,因为purch_amount(948.5)
您获得的ord_no为70009的行,因为purch_amount(270.65)
根据正确答案,

SELECT * FROM orders WHERE NOT
((ord_date = '2012-09-10' AND salesman_id > 505)
OR purch_amt > 1000.00);


where条件等于
(ord_date != '2012-09-10' OR salesman_id <= 505) AND purch_amt <= 1000.00由于NOT。然后,您可以使用上述数据验证条件。

答案也可以表示为

SELECT * FROM orders
WHERE ord_date != '2012-09-10' AND (salesman_id <= 505 OR purch_amt <= 1000.00);

10-01 03:20