Выборка уникальных записей с условием - MySQL

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

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

Добрый вечер! Есть таблица:
prod_id catalog_id
1 13
1 9
2 13
2 9
3 9
4 50
4 85
5 50
5 85
Помогите составить запрос для выборки значений `prod_id`, которые встречаются ТОЛЬКО при определенном `catalog_id`. Например, если `catalog_id` = 9, то в результате должно быть только значение 3, а 1 и 2 нет, т.к. они ещё есть в `catalog_id` = 13.

Решение задачи: «Выборка уникальных записей с условием»

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
)

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

  1. Создаётся таблица «x» с двумя полями: «i» и «c».
  2. В таблицу «x» добавляются данные с помощью оператора «INSERT INTO».
  3. Выполняется запрос «SELECT» для выбора уникальных записей из таблицы «x».
  4. В запросе используется подзапрос «NOT EXISTS», который проверяет наличие других записей с такими же значениями в полях «i» и «c» и с другим значением в поле «c». Если такие записи есть, то текущая запись не будет выбрана.
  5. В результате выполнения запроса выводятся уникальные записи с полями «i» и «c».

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

8   голосов , оценка 4.5 из 5
Похожие ответы