Запрос на выборку ИД продуктов по - MySQL
Формулировка задачи:
Помогите, пожалуйста, построить запрос
Таблица
Хочу выбрать только те продукты, в которых filter_id не имеет значения 1444, но имеет значение 1446.
product_to_filter
| product_id | filter_id |
| 1 | 1444 |
| 2 | 1445 |
| 3 | 1446 |
| 1 | 1445 |
| 1 | 1446 |
| 2 | 1446 |
| 2 | 1444 |
| 5 | 1446 |
Результат запроса должен быть
| product_id |
| 3 |
| 5 |
Решение задачи: «Запрос на выборку ИД продуктов по»
textual
Листинг программы
FROM product_to_filter a WHERE a.filter_id = 1446 AND NOT EXISTS ( SELECT filter_id FROM product_to_filter b WHERE b.product_id = a.product_id AND filter_id = 1444 );
Объяснение кода листинга программы
В данном коде на языке SQL выполняется запрос выборки ИД продуктов, которые необходимо отфильтровать.
- FROM product_to_filter a — указывается таблица, из которой производится выборка (в данном случае
product_to_filter) и название столбца, по которому происходит выборка (в данном случаеa). - WHERE — начинается условие выборки.
- a.filter_id = 1446 - устанавливается первое условие: значение столбца
filter_idдолжно быть равно 1446. - AND NOT EXISTS ( — добавляется второе условие с использованием подзапроса: не должно существовать записей, удовлетворяющих условию.
- SELECT filter_id — указывается, какие столбцы из таблицы
product_to_filterдолжны быть выбраны в подзапросе (в данном случае толькоfilter_id). - FROM product_to_filter b — указывается таблица, из которой производится выборка для подзапроса (в данном случае
product_to_filter). - WHERE b.product_id = a.product_id AND filter_id = 1444 - устанавливаются условия для подзапроса: значение столбца
product_idдолжно быть равно значению столбцаproduct_idиз исходной таблицы, а значение столбцаfilter_idдолжно быть равно 1444. - ) — закрывается подзапрос.
- ; — заканчивается условие выборки.