Брать значение с другой таблицы, если оно есть - MySQL

Узнай цену своей работы

Формулировка задачи:

Помогите, пожалуйста, составить запрос

таблица product (все продукты)

Листинг программы
  1. product_id|price
  2. 1|125
  3. 2|100
  4. 3|70
  5. 4|130
  6. 5|70
  7. 6|60
  8. 7|150

таблица product_discount (содержит только продукты со скидкой)

Листинг программы
  1. product_id|new_price
  2. 1|99
  3. 2|25
  4. 4|50
Нужно получить получить продукты, цена которых price>=20 AND price<=90

должен быть ответ

Листинг программы
  1. product_id
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6

Пробовал

Листинг программы
  1. SELECT p.product_id, IF(pd.new_price <=> NULL, pd.new_price, p.price) AS price FROM product p
  2. LEFT JOIN product_discount pd ON (p.product_id = pd.product_id)
  3. WHERE price>=20 AND price<=90

В ответ

Листинг программы
  1. product_id
  2. 3
  3. 5
  4. 6

Дамп базы

Листинг программы
  1. CREATE TABLE `product` (
  2. `product_id` INT(11) NOT NULL,
  3. `price` INT(11) NOT NULL
  4. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  5. INSERT INTO `product` (`product_id`, `price`) VALUES
  6. (1, 125),
  7. (2, 100),
  8. (3, 70),
  9. (4, 130),
  10. (5, 70),
  11. (6, 60),
  12. (7, 150);
  13. CREATE TABLE `product_discount` (
  14. `product_id` INT(11) NOT NULL,
  15. `new_price` INT(11) NOT NULL
  16. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  17. INSERT INTO `product_discount` (`product_id`, `new_price`) VALUES
  18. (1, 99),
  19. (2, 25),
  20. (4, 50);

Решение задачи: «Брать значение с другой таблицы, если оно есть»

textual
Листинг программы
  1. SELECT DISTINCT product_id FROM (
  2.     SELECT product_id FROM product WHERE price >= 20 AND price <=90
  3.     UNION ALL
  4.     SELECT product_id FROM product_discount WHERE new_price >= 20 AND new_price <=90
  5. ) x ORDER BY 1;

Объяснение кода листинга программы

  1. Сначала мы имеем два отдельных запроса на выборку из таблиц product и product_discount
  2. Оба запроса имеют условие WHERE, которое фильтрует товары по цене (от 20 до 90)
  3. Затем мы используем оператор UNION ALL, чтобы объединить результаты обоих запросов в один набор данных
  4. Результат объединения затем сортируется по product_id с помощью ORDER BY
  5. И, наконец, мы используем DISTINCT, чтобы убедиться, что каждый product_id отображается только один раз в итоговом результате.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.5 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы