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

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

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

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

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

product_id|price
1|125
2|100
3|70
4|130
5|70
6|60
7|150

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

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

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

product_id
2
3
4
5
6

Пробовал

SELECT p.product_id, IF(pd.new_price <=> NULL, pd.new_price, p.price) AS price FROM product p
LEFT JOIN product_discount pd ON (p.product_id = pd.product_id)
WHERE price>=20 AND price<=90

В ответ

product_id
3
5
6

Дамп базы

CREATE TABLE `product` (
  `product_id` INT(11) NOT NULL,
  `price` INT(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `product` (`product_id`, `price`) VALUES
(1, 125),
(2, 100),
(3, 70),
(4, 130),
(5, 70),
(6, 60),
(7, 150);
CREATE TABLE `product_discount` (
  `product_id` INT(11) NOT NULL,
  `new_price` INT(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `product_discount` (`product_id`, `new_price`) VALUES
(1, 99),
(2, 25),
(4, 50);

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

textual
Листинг программы
SELECT DISTINCT product_id FROM (
    SELECT product_id FROM product WHERE price >= 20 AND price <=90
    UNION ALL
    SELECT product_id FROM product_discount WHERE new_price >= 20 AND new_price <=90
) 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
Похожие ответы