Имеем некую абстрактную СУБД, работающую по стандарту SQL-92 (на самом деле нужно для 1С, но в рамках этой задачи аналогия правомерна).
Исходные данные:
Таблица
Номенклатура (goods):
Наименование (
description)
Бренд (
id_brand)
Пол (
sex)
Таблица
Реализаторы (sellers)
Реализатор (
id_seller)
NOT NULLБренд (
id_brand)
Пол (
sex)
На выходе нужно получить таблицу
Реализаторы номенклатуры:
Наименование (
description)
Бренд (
id_brand)
Пол (
sex)
Реализатор (
id_seller)
сформированную по следующим правилам:
1. Если в таблице реализаторы есть полное соответствие параметров (бренд, пол) - берем это значение
2. Иначе если есть соответствие только бренда и значение
sellers.sex IS NULL - берем это значение
3. Иначе подставляем значение по умолчанию (
sellers.id_brand IS NULL & sellers.sex IS NULL)
Вот пример:
Результат нужно получить запросом (или набором запросов с временными таблицами) без использования функций
Добавлено через 11 минут и 48 секунд:Доп.условие (не обязательно): желательно сделать запрос, который нужно минимально редактировать когда количество полей для связи увеличится (например 3 а не 2 - добавим еще Цвет).
При этом считаем что есть четкая логика приоритетов по порядку полей: Бренд, Пол, Цвет.
Приоритет 1: Бренд, Пол, Цвет
Приоритет 2: Бренд, Пол, NULL
Приоритет 3: Бренд, NULL, NULL
Приоритет 4: NULL, NULL, NULL
Значения NULL возможны только справа подряд, т.е. варианты
Бренд, NULL, Цвет или
NULL, Пол, NULL недопустимы (контролируется триггерами)