SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 29.03.2023 22:52:59

Римович
Участник
Зарегистрирован: 25.01.2023
Сообщений: 15

Задание М.Грабера и MySQL - где ошибка?

Приветствую!

Штудируя учебник уважаемого М. Грабера столкнулся с такой проблемой.
В задании Гл.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)


Прикрепленные файлы:
Attachment Icon Скриншот 29.03.23_22.33.58.jpg, Размер: 52,163 байт, Скачано: 61

Неактивен

 

#2 29.03.2023 23:03:21

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Задание М.Грабера и MySQL - где ошибка?

Не выполняется условие на дату, так как в правой части равенства odate = 10/03/1990 mysql выполняет деление.
Замените условие на

odate = '1990-03-10'

Неактивен

 

#3 30.03.2023 19:04:35

Римович
Участник
Зарегистрирован: 25.01.2023
Сообщений: 15

Re: Задание М.Грабера и 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)


Прикрепленные файлы:
Attachment Icon Скриншот 30.03.23_19.02.30.jpg, Размер: 50,599 байт, Скачано: 66

Неактивен

 

#4 30.03.2023 19:48:28

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5833

Re: Задание М.Грабера и MySQL - где ошибка?

Теперь выполняет вычитание. Кавычки забыли.

Неактивен

 

#5 30.03.2023 20:31:29

Римович
Участник
Зарегистрирован: 25.01.2023
Сообщений: 15

Re: Задание М.Грабера и MySQL - где ошибка?

Уф... Благодарю! Всё верно - кавычки... ( Три дня промучился. )))
Посчитал, что если тип данных поля - "date", то записанной в установленном формате дате кавычки не нужны...

Отредактированно Римович (30.03.2023 21:12:59)

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson