Брать значение с другой таблицы, если оно есть - MySQL
Формулировка задачи:
Помогите, пожалуйста, составить запрос
Нужно получить получить продукты, цена которых price>=20 AND price<=90
таблица 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
должен быть ответ
Листинг программы
- 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;
Объяснение кода листинга программы
- Сначала мы имеем два отдельных запроса на выборку из таблиц
product
иproduct_discount
- Оба запроса имеют условие
WHERE
, которое фильтрует товары по цене (от 20 до 90) - Затем мы используем оператор
UNION ALL
, чтобы объединить результаты обоих запросов в один набор данных - Результат объединения затем сортируется по
product_id
с помощьюORDER BY
- И, наконец, мы используем
DISTINCT
, чтобы убедиться, что каждыйproduct_id
отображается только один раз в итоговом результате.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д