Задавайте вопросы, мы ответим
Вы не зашли.
Приветствую!
Штудируя учебник уважаемого М. Грабера столкнулся с такой проблемой.
В задании Гл.4, в п.4, предлагается определить результат запроса SQL. Мой ответ сходится с ответом учебника, но!
Когда я набираю этот запрос в MySQL, возвращается вот такой результат:
mysql> SELECT *
-> FROM Orders
-> WHERE (amt < 1000 OR
-> NOT (odate = 10/03/1990
-> AND cnum > 2003));
+------+---------+------------+------+------+
| onum | amt | odate | cnum | snum |
+------+---------+------------+------+------+
| 3001 | 18.69 | 1990-03-10 | 2008 | 1007 |
| 3003 | 767.19 | 1990-03-10 | 2001 | 1001 |
| 3002 | 1900.1 | 1990-03-10 | 2007 | 1004 |
| 3005 | 5160.45 | 1990-03-10 | 2003 | 1002 |
| 3006 | 1098.16 | 1990-03-10 | 2008 | 1007 |
| 3009 | 1713.23 | 1990-04-10 | 2002 | 1003 |
| 3007 | 75.75 | 1990-04-10 | 2004 | 1002 |
| 3008 | 4723 | 1990-05-10 | 2006 | 1001 |
| 3010 | 1309.95 | 1990-06-10 | 2004 | 1002 |
| 3011 | 9891.88 | 1990-06-10 | 2006 | 1001 |
+------+---------+------------+------+------+
10 rows in set (0.05 sec)
Но в выводе не должно быть записей, где onum = 3002 и 3006! Они исключаются условиями предиката. В чём тут дело? MySQL иначе работает со скобками?
Отредактированно Римович (29.03.2023 22:53:43)
Неактивен
Не выполняется условие на дату, так как в правой части равенства odate = 10/03/1990 mysql выполняет деление.
Замените условие на
Неактивен
rgbeast написал:
Не выполняется условие на дату, так как в правой части равенства odate = 10/03/1990 mysql выполняет деление.
Замените условие наodate = '1990-03-10'
Если бы всё было так просто... )
mysql> SELECT *
-> FROM Orders
-> WHERE (amt < 1000 OR
-> NOT (odate = 1990-03-10
-> AND cnum > 2003));
+------+---------+------------+------+------+
| onum | amt | odate | cnum | snum |
+------+---------+------------+------+------+
| 3001 | 18.69 | 1990-03-10 | 2008 | 1007 |
| 3003 | 767.19 | 1990-03-10 | 2001 | 1001 |
| 3002 | 1900.1 | 1990-03-10 | 2007 | 1004 |
| 3005 | 5160.45 | 1990-03-10 | 2003 | 1002 |
| 3006 | 1098.16 | 1990-03-10 | 2008 | 1007 |
| 3009 | 1713.23 | 1990-04-10 | 2002 | 1003 |
| 3007 | 75.75 | 1990-04-10 | 2004 | 1002 |
| 3008 | 4723 | 1990-05-10 | 2006 | 1001 |
| 3010 | 1309.95 | 1990-06-10 | 2004 | 1002 |
| 3011 | 9891.88 | 1990-06-10 | 2006 | 1001 |
+------+---------+------------+------+------+
10 rows in set, 1 warning (0.01 sec)
Неактивен
Теперь выполняет вычитание. Кавычки забыли.
Неактивен
Уф... Благодарю! Всё верно - кавычки... ( Три дня промучился. )))
Посчитал, что если тип данных поля - "date", то записанной в установленном формате дате кавычки не нужны...
Отредактированно Римович (30.03.2023 21:12:59)
Неактивен