Вопрос по запросу, вариативность связей при соединение
Всем привет! чтобы не запутывать неясностью формулировок сразу прикладываю
скрин.
Итак вопрос:
как наиболее оптимально разработать запрос чтобы при соединение таблиц 1 и таблиц 2 получалась таблица 3.
сложность в том,что приходится то использовать то не использовать какое либо соединение по полям.
ДОПОЛНЕНИЕ:
Сначала надо проверить наличие данных в первой таблице с совпадениями по всем 3 полям,потом по 2ум,потом о одному.
скрин.
Итак вопрос:
как наиболее оптимально разработать запрос чтобы при соединение таблиц 1 и таблиц 2 получалась таблица 3.
сложность в том,что приходится то использовать то не использовать какое либо соединение по полям.
ДОПОЛНЕНИЕ:
Сначала надо проверить наличие данных в первой таблице с совпадениями по всем 3 полям,потом по 2ум,потом о одному.
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
выбрать т2.блюдо, т2.состояние, т2.вкус, максимум( isnull(т1_1.цена, isnull(т1_2.цена,т1_3.цена)))
из
таблица2 т2
левое соединение таблица1 т1_1 по т2.блюдо=т1_1.блюдо и т2.состояние=т1_1.состояние и т2.вкус=т1_1.вкус
левое соединение таблица1 т1_2 по т2.блюдо=т1_2.блюдо и т2.состояние=т1_2.состояние и т2.вкус=значение(вкус_пустая_ссылка)
левое соединение таблица1 т1_3 по т2.блюдо=т1_3.блюдо и т2.состояние=значение(состояние_пустая_ссылка) и т2.вкус=значение(вкус_пустая_ссылка)
сгруппировать по т2.блюдо, т2.состояние, т2.вкус
из
таблица2 т2
левое соединение таблица1 т1_1 по т2.блюдо=т1_1.блюдо и т2.состояние=т1_1.состояние и т2.вкус=т1_1.вкус
левое соединение таблица1 т1_2 по т2.блюдо=т1_2.блюдо и т2.состояние=т1_2.состояние и т2.вкус=значение(вкус_пустая_ссылка)
левое соединение таблица1 т1_3 по т2.блюдо=т1_3.блюдо и т2.состояние=значение(состояние_пустая_ссылка) и т2.вкус=значение(вкус_пустая_ссылка)
сгруппировать по т2.блюдо, т2.состояние, т2.вкус
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) обычное левое соединение.
ВЫБРАТЬ
Таблица2.Блюдо КАК Блюдо,
Таблица2.Состояние КАК Состояние,
Таблица2.Вкус КАК Вкус,
Таблица1.Цена КАК Цена
ИЗ
Таблица2 КАК Таблица2
ЛЕВОЕ СОЕДИНЕНИЕ Таблица1 КАК Таблица1
ПО (Таблица2.Блюдо = Таблица1.Блюдо
И Таблица2.Состояние = Таблица1.Состояние
И Таблица2.Вкус = Таблица1.Вкус)
Показать
Сделать 3 запроса и объединить их результаты.
Блюдо Состояние Вкус Признак1 Цена1
Блюдо Состояние Вкус Признак2 Цена2
Блюдо Состояние Вкус Признак3 Цена3
В поле ПризнакХ пишем просто число 1.
При объединении запросов поля ПризнакХ и ЦенаХ намеренно не складываем между собой
Получаем таблицу:
Блюдо Состояние Вкус Признак1 Цена1 Признак2 Цена2 Признак3 Цена3
Её группируем по полям Блюдо Состояние Вкус, При этом правило группировки для остальных колонок не СУММА, а МАКСИМУМ(ну или МАКСИМУМ для ПризнакХ и СРЕДНЕЕ для ЦенаХ, смотрите сами по бизнес логике)
Затем ещё одним запросом к получившейся таблице отбрасываем все поля ПризнакХ , ЦенаХ , оставляем одно поле Цена по формуле:
Цена1+(1-Признак1)*Цена2+(1-Признак2)*Цена3
Блюдо Состояние Вкус Признак1 Цена1
Блюдо Состояние Вкус Признак2 Цена2
Блюдо Состояние Вкус Признак3 Цена3
В поле ПризнакХ пишем просто число 1.
При объединении запросов поля ПризнакХ и ЦенаХ намеренно не складываем между собой
Получаем таблицу:
Блюдо Состояние Вкус Признак1 Цена1 Признак2 Цена2 Признак3 Цена3
Её группируем по полям Блюдо Состояние Вкус, При этом правило группировки для остальных колонок не СУММА, а МАКСИМУМ(ну или МАКСИМУМ для ПризнакХ и СРЕДНЕЕ для ЦенаХ, смотрите сами по бизнес логике)
Затем ещё одним запросом к получившейся таблице отбрасываем все поля ПризнакХ , ЦенаХ , оставляем одно поле Цена по формуле:
Цена1+(1-Признак1)*Цена2+(1-Признак2)*Цена3
выбрать т2.блюдо, т2.состояние, т2.вкус, максимум( isnull(т1_1.цена, isnull(т1_2.цена,т1_3.цена)))
из
таблица2 т2
левое соединение таблица1 т1_1 по т2.блюдо=т1_1.блюдо и т2.состояние=т1_1.состояние и т2.вкус=т1_1.вкус
левое соединение таблица1 т1_2 по т2.блюдо=т1_2.блюдо и т2.состояние=т1_2.состояние и т2.вкус=значение(вкус_пустая_ссылка)
левое соединение таблица1 т1_3 по т2.блюдо=т1_3.блюдо и т2.состояние=значение(состояние_пустая_ссылка) и т2.вкус=значение(вкус_пустая_ссылка)
сгруппировать по т2.блюдо, т2.состояние, т2.вкус
из
таблица2 т2
левое соединение таблица1 т1_1 по т2.блюдо=т1_1.блюдо и т2.состояние=т1_1.состояние и т2.вкус=т1_1.вкус
левое соединение таблица1 т1_2 по т2.блюдо=т1_2.блюдо и т2.состояние=т1_2.состояние и т2.вкус=значение(вкус_пустая_ссылка)
левое соединение таблица1 т1_3 по т2.блюдо=т1_3.блюдо и т2.состояние=значение(состояние_пустая_ссылка) и т2.вкус=значение(вкус_пустая_ссылка)
сгруппировать по т2.блюдо, т2.состояние, т2.вкус
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот