Вопрос по запросу, вариативность связей при соединение

1. rafaiil 27.05.18 21:15 Сейчас в теме
Всем привет! чтобы не запутывать неясностью формулировок сразу прикладываю
скрин.
Итак вопрос:
как наиболее оптимально разработать запрос чтобы при соединение таблиц 1 и таблиц 2 получалась таблица 3.
сложность в том,что приходится то использовать то не использовать какое либо соединение по полям.

ДОПОЛНЕНИЕ:
Сначала надо проверить наличие данных в первой таблице с совпадениями по всем 3 полям,потом по 2ум,потом о одному.
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
6. ditp 94 28.05.18 06:55 Сейчас в теме
выбрать т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. spacecraft 27.05.18 21:38 Сейчас в теме
(1) обычное левое соединение.
ВЫБРАТЬ
	Таблица2.Блюдо КАК Блюдо,
	Таблица2.Состояние КАК Состояние,
	Таблица2.Вкус КАК Вкус,
	Таблица1.Цена КАК Цена
ИЗ
	Таблица2 КАК Таблица2
	ЛЕВОЕ СОЕДИНЕНИЕ Таблица1 КАК Таблица1
	ПО (Таблица2.Блюдо = Таблица1.Блюдо
		И Таблица2.Состояние = Таблица1.Состояние
		И Таблица2.Вкус = Таблица1.Вкус)
Показать
3. rafaiil 27.05.18 21:58 Сейчас в теме
(2)
да я накосячил.
по факту задачу нужно дополнить:
Сначала надо проверить наличие данных в первой таблице с совпадениями по всем 3 полям,потом по 2ум,потом о одному. если уж нет то NULL
4. spacecraft 27.05.18 22:07 Сейчас в теме
(3) тогда могу посоветовать ознакомиться с тем, как вообще работает левое соединение.
5. Sapiens_bru 4 28.05.18 05:24 Сейчас в теме
Сделать 3 запроса и объединить их результаты.
Блюдо Состояние Вкус Признак1 Цена1
Блюдо Состояние Вкус Признак2 Цена2
Блюдо Состояние Вкус Признак3 Цена3
В поле ПризнакХ пишем просто число 1.
При объединении запросов поля ПризнакХ и ЦенаХ намеренно не складываем между собой
Получаем таблицу:
Блюдо Состояние Вкус Признак1 Цена1 Признак2 Цена2 Признак3 Цена3

Её группируем по полям Блюдо Состояние Вкус, При этом правило группировки для остальных колонок не СУММА, а МАКСИМУМ(ну или МАКСИМУМ для ПризнакХ и СРЕДНЕЕ для ЦенаХ, смотрите сами по бизнес логике)
Затем ещё одним запросом к получившейся таблице отбрасываем все поля ПризнакХ , ЦенаХ , оставляем одно поле Цена по формуле:
Цена1+(1-Признак1)*Цена2+(1-Признак2)*Цена3
7. Jimbo 10 28.05.18 09:40 Сейчас в теме
ребят (5), (6) - что за бред вы пишете ?
в (1) дал верный ответ, обычное левое соединение и не надо огород городить
8. ditp 94 28.05.18 09:49 Сейчас в теме
9. spacecraft 28.05.18 09:53 Сейчас в теме
(8) осталось теперь понять, как (3) соотносится со скрином таблиц.
10. rafaiil 28.05.18 10:32 Сейчас в теме
(9)вы правы.таблицу 3 я удалил
6. ditp 94 28.05.18 06:55 Сейчас в теме
выбрать т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.вкус
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот