Выборка уникальных записей с условием - MySQL
Формулировка задачи:
Добрый вечер!
Есть таблица:
Помогите составить запрос для выборки значений `prod_id`, которые встречаются ТОЛЬКО при определенном `catalog_id`.
Например, если `catalog_id` = 9, то в результате должно быть только значение 3, а 1 и 2 нет, т.к. они ещё есть в `catalog_id` = 13.
prod_id | catalog_id |
1 | 13 |
1 | 9 |
2 | 13 |
2 | 9 |
3 | 9 |
4 | 50 |
4 | 85 |
5 | 50 |
5 | 85 |
Решение задачи: «Выборка уникальных записей с условием»
textual
Листинг программы
CREATE TABLE x ( i INT, -- prod_id c INT -- catalog_id ) engine = myisam DEFAULT CHARACTER SET = cp1251; INSERT INTO x VALUES (1,13), (1,9), (2,13), (2,9), (3,9), (4,50), (4,85), (5,50), (5,85); SELECT a.i, a.c FROM x a WHERE a.c = 9 AND NOT EXISTS ( SELECT * FROM x b WHERE a.i = b.i AND a.c <> b.c )
Объяснение кода листинга программы
- Создаётся таблица «x» с двумя полями: «i» и «c».
- В таблицу «x» добавляются данные с помощью оператора «INSERT INTO».
- Выполняется запрос «SELECT» для выбора уникальных записей из таблицы «x».
- В запросе используется подзапрос «NOT EXISTS», который проверяет наличие других записей с такими же значениями в полях «i» и «c» и с другим значением в поле «c». Если такие записи есть, то текущая запись не будет выбрана.
- В результате выполнения запроса выводятся уникальные записи с полями «i» и «c».