SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 16.04.2019 09:25:59

Lugner32
Завсегдатай
Зарегистрирован: 04.04.2019
Сообщений: 25

Помогите откорректировать запрос для решения задачи.

Всем привет... Нужна помощь в корректировке запроса.
Есть задача:
В таблице products находятся товары, а в categories — категории, к которым они относятся. Поле category_id является внешним ключом, который указывает на первичный ключ категории.

Получите в одном запросе имя товара, цену товара и имя категории, к которой принадлежит товар.
Отсортируйте данные в алфавитном порядке по имени товара.
Имя категории выведите в колонке с именем category.
Если у товара нет категории, то выведите NULL.

products
id    name    count    price    category_id
1    Сникерс большой    3    56    1
2    Сливочное масло Милка    2    104.4    2
3    Яблоки ред    7    98    NULL
4    Яблоки голден    3    89    NULL
5    Марс    7    36.5    1
6    Сметана 20    2    49    2
7    Сметана 15    4    45    2
8    Сметана 20 фермерская    1    78.9    2
9    Апельсины    5    70    NULL
10    Макароны 1 кг    4    56    4
11    Вода 1 л    12    18    5
12    Гречка 0,5 кг    4    45    4
13    Хлеб былый    7    23.4    8
14    Творог 9    3    56    2
15    Шампунь H&S    0    238    7
16    Баунти    0    38.9    1
17    Батон купеческий    5    34.5    8
18    Говядина    1    308    17
19    Помидоры    8    46    NULL
20    Индейка    2    534    17
21    Свинина    0    349    17
22    Тарелки 12 шт    0    780    6
23    Кружки 6 шт    0    230    6

categories
id    name
1    Шоколад
2    Молочные продкты
3    Фрукты и овощи
4    Крупы
5    Напитки
6    Посуда
7    Шампуни
8    Хлеб
9    Консервы
10    Чай и кофе
11    Алкоголь
12    Колбасы
13    Полуфабрикаты
14    Растительное масло
15    Рыба
16    Товары гигиены
17    Мясо
Вот решение которое до которого я додумался:

SELECT p.name,
p.price,c.name as category
FROM products as p
JOIN categories as c
ON c.id = p.category_id
ORDER BY name


Возврат по нему такой:
The query should return 23 records

Query result:
+-----------------------+-------+------------------+
| name                  | price | category         |
+-----------------------+-------+------------------+
| Батон купеческий      | 35    | Хлеб             |
| Баунти                | 39    | Шоколад          |
| Вода 1 л              | 18    | Напитки          |
| Говядина              | 308   | Мясо             |
| Гречка 0,5 кг         | 45    | Крупы            |
| Индейка               | 534   | Мясо             |
| Кружки 6 шт           | 230   | Посуда           |
| Макароны 1 кг         | 56    | Крупы            |
| Марс                  | 37    | Шоколад          |
| Свинина               | 349   | Мясо             |
| Сливочное масло Милка | 104   | Молочные продкты |
| Сметана 15            | 45    | Молочные продкты |
| Сметана 20            | 49    | Молочные продкты |
| Сметана 20 фермерская | 79    | Молочные продкты |
| Сникерс большой       | 56    | Шоколад          |
| Тарелки 12 шт         | 780   | Посуда           |
| Творог 9              | 56    | Молочные продкты |
| Хлеб былый            | 23    | Хлеб             |
| Шампунь H&S           | 238   | Шампуни          |
+-----------------------+-------+------------------+
Affected rows: 19

Что нужно добавить/исправить?
Помогите "допинать" его до правильного решения :-)

Неактивен

 

#2 16.04.2019 10:14:37

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2226

Re: Помогите откорректировать запрос для решения задачи.

При Вашем текущем варианте запроса не будут выведены товары, у которых category_id NULL. поменяйте JOIN на LEFT JOIN, должно получиться веселее - всякие безкатегорийные помидоры появятся smile


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 16.04.2019 10:40:11

Lugner32
Завсегдатай
Зарегистрирован: 04.04.2019
Сообщений: 25

Re: Помогите откорректировать запрос для решения задачи.

deadka написал:

При Вашем текущем варианте запроса не будут выведены товары, у которых category_id NULL. поменяйте JOIN на LEFT JOIN, должно получиться веселее - всякие безкатегорийные помидоры появятся smile

Я уже веселился так big_smile
Я вот и хочу помощи как сделать чтоб не веселиться от возвращенного результата, а радоваться решению задачи и очередному баллу smile

Неактивен

 

#4 16.04.2019 10:43:23

Lugner32
Завсегдатай
Зарегистрирован: 04.04.2019
Сообщений: 25

Re: Помогите откорректировать запрос для решения задачи.

deadka написал:

При Вашем текущем варианте запроса не будут выведены товары, у которых category_id NULL. поменяйте JOIN на LEFT JOIN, должно получиться веселее - всякие безкатегорийные помидоры появятся smile

ОГО
Самое интересное что я поменял на LEFT JOIN (до этого пробовал LEFT OUTER JOIN) и задача решилась
Query result:
+-----------------------+-------+------------------+
| name                  | price | category         |
+-----------------------+-------+------------------+
| Апельсины             | 70    | None             |
| Батон купеческий      | 35    | Хлеб             |
| Баунти                | 39    | Шоколад          |
| Вода 1 л              | 18    | Напитки          |
| Говядина              | 308   | Мясо             |
| Гречка 0,5 кг         | 45    | Крупы            |
| Индейка               | 534   | Мясо             |
| Кружки 6 шт           | 230   | Посуда           |
| Макароны 1 кг         | 56    | Крупы            |
| Марс                  | 37    | Шоколад          |
| Помидоры              | 46    | None             |
| Свинина               | 349   | Мясо             |
| Сливочное масло Милка | 104   | Молочные продкты |
| Сметана 15            | 45    | Молочные продкты |
| Сметана 20            | 49    | Молочные продкты |
| Сметана 20 фермерская | 79    | Молочные продкты |
| Сникерс большой       | 56    | Шоколад          |
| Тарелки 12 шт         | 780   | Посуда           |
| Творог 9              | 56    | Молочные продкты |
| Хлеб былый            | 23    | Хлеб             |
| Шампунь H&S           | 238   | Шампуни          |
| Яблоки голден         | 89    | None             |
| Яблоки ред            | 98    | None             |
+-----------------------+-------+------------------+
Affected rows: 23

Видимо система не очень сильно придирается к значениям возвращенной таблицы... Но это же не совсем правильно?

Неактивен

 

#5 16.04.2019 10:45:16

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2226

Re: Помогите откорректировать запрос для решения задачи.

Странно, по идее LEFT JOIN и LEFT OUTER JOIN должны давать один результат. Если у Вас они разные результаты дают - приложите оба результата сюда в топик?

Lugner32 написал:

Видимо система не очень сильно придирается к значениям возвращенной таблицы... Но это же не совсем правильно?

Не вполне понятен вопрос, если честно.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#6 16.04.2019 11:30:18

Lugner32
Завсегдатай
Зарегистрирован: 04.04.2019
Сообщений: 25

Re: Помогите откорректировать запрос для решения задачи.

deadka написал:

Странно, по идее LEFT JOIN и LEFT OUTER JOIN должны давать один результат. Если у Вас они разные результаты дают - приложите оба результата сюда в топик?

Прошу прощения я Вас дезинформировал я "игрался" с RIGHT JOINом sad

Lugner32 написал:

Видимо система не очень сильно придирается к значениям возвращенной таблицы... Но это же не совсем правильно?

Не вполне понятен вопрос, если честно.

Я имел ввиду что по условиям задачи безкатегорийные товары должны в поле category возвращать NULL а не None
Однако с None ответ на задачу прошёл и был засчитан...
Хочется понять как должно быть,чтобы был NULL..
Подскажите?

Отредактированно Lugner32 (16.04.2019 11:30:37)

Неактивен

 

#7 16.04.2019 11:33:24

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2226

Re: Помогите откорректировать запрос для решения задачи.

А где Вы запросы-то запускаете? None - это Ваш mysql-клиент уже "своевольничает", там должен быть NULL. попробуйте в родном mysql-клиенте?


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#8 16.04.2019 11:38:17

Lugner32
Завсегдатай
Зарегистрирован: 04.04.2019
Сообщений: 25

Re: Помогите откорректировать запрос для решения задачи.

deadka написал:

А где Вы запросы-то запускаете? None - это Ваш mysql-клиент уже "своевольничает", там должен быть NULL. попробуйте в родном mysql-клиенте?

Это задачи на учебном сервисе( степик.орг)... есть задача и окно для ответа и неограниченное число попыток smile

Неактивен

 

#9 16.04.2019 13:50:59

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2226

Re: Помогите откорректировать запрос для решения задачи.

Однако с None ответ на задачу прошёл и был засчитан...

Ну вот это, значит степик.орг'овские какие-то уже фокусы, хорошо, что преподаватели это понимают ))


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#10 16.04.2019 13:56:06

Lugner32
Завсегдатай
Зарегистрирован: 04.04.2019
Сообщений: 25

Re: Помогите откорректировать запрос для решения задачи.

deadka написал:

Однако с None ответ на задачу прошёл и был засчитан...

Ну вот это, значит степик.орг'овские какие-то уже фокусы, хорошо, что преподаватели это понимают ))

Это точно! smile


Но всё же, что мне нужно было дописать для того чтобы NULL был? Просто Стэпик стэпиком, а правильность понять хочется..Ибо в дальнейшем если жизнь меня свяжет с работой с СУБД то нужно же грамотно составлять запросы )))

Неактивен

 

#11 16.04.2019 14:17:12

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2226

Re: Помогите откорректировать запрос для решения задачи.

Ничего не нужно, и так будет NULL, если в нормальном клиенте запускать.
Можете убедиться на каком-нибудь https://www.db-fiddle.com/


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#12 16.04.2019 14:30:16

Lugner32
Завсегдатай
Зарегистрирован: 04.04.2019
Сообщений: 25

Re: Помогите откорректировать запрос для решения задачи.

deadka написал:

Ничего не нужно, и так будет NULL, если в нормальном клиенте запускать.
Можете убедиться на каком-нибудь https://www.db-fiddle.com/

Спасибо за помощь :-) В общем буду тренироваться))) У меня установлен HeidiSQL..Буду там создавать таблицы и тестить запросы :-)

Неактивен

 

#13 16.04.2019 14:36:31

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2226

Re: Помогите откорректировать запрос для решения задачи.

Удачи в тернистом, но отрадном пути database-developer'a :-)


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#14 16.04.2019 15:08:21

Lugner32
Завсегдатай
Зарегистрирован: 04.04.2019
Сообщений: 25

Re: Помогите откорректировать запрос для решения задачи.

deadka написал:

Удачи в тернистом, но отрадном пути database-developer'a :-)

THANK YOU VERY MUCH!! И Вам удачи во всех делах :-)

Неактивен

 

Board footer

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