Мне нужна помощь в том, как написать запрос SQL Server 2005 для обработки объединения нескольких подтасов. Вот мой сценарий:Как структурировать запрос tsql для обработки нескольких subtables
Таблицы:
Клиенты
- Customer_PK
Заказы
- Order_PK
- OrdersTypeA_FK
- OrdersTypeB_FK
- OrdersTypeC_FK
- Customer_FK
OrdersTypeA
- OrdersTypeA_PK
- Shipper_FK
OrdersTypeB
- OrdersTypeB_PK
- Shipper_FK
OrdersTypeC
- OrdersTypeC_PK
- Shipper_FK
грузоотправители
- Shipper_PK
- ShipperAddress_FK
ShipperAddress
- ShipperAddress_PK
- ShipperState
В таблице Заказы есть данные, выглядит следующим образом:
Order_PK OrdersTypeA_FK OrdersTypeB_FK OrdersTypeC_FK Customer_FK
-------- -------------- -------------- -------------- -----------
1 1 null null 1
2 null 1 null 2
3 null null 1 3
Моя проблема в том, что мне нужно, чтобы команда select join извлекала ShipperAddress, находя Shipped_FK из одной из трех таблиц OrdersType. В таблице «Заказы» будет только один экземпляр FK для каждой строки. Единственное, что мне нужно для возврата из таблицы OrdersType, это Shipper_FK, чтобы я мог присоединиться к таблице ShipperAddress.
Итак, как выглядит соединение?
select
ShipperAddress.ShipperState
from Customers
left join Orders on Orders.Customer_FK = Customers.Customer_PK
????????
left join Shippers on Shipper_PK = ??????.Shipper_FK
left join ShipperAddress on ShipperAddress.ShipperAddress_PK = Shippers.ShipperAddress_FK
У меня нет отдельного соединения с ShipperAddress для каждой из таблиц OrdersType. Это меньшая выборка проблемы, которая имеет гораздо больше таблиц на уровне OrdersType. Shipper_FK является одинаковым в каждой из таблиц OrdersType. Мне нужно получить в Shipper_FK вне зависимости от того, из какой таблицы OrdersType он пришел, чтобы продолжить с заявлением о соединении. Как это можно сделать?
Почему у вас есть три колонки типа заказа (и затем три различные таблицы, чтобы идти вместе с ними)? Что в этих типах заказов так отличается от них, что их нужно отдельно моделировать? –
Это всего лишь пример структуры таблиц, с которыми я имею дело. В этом примере рассмотрим OrderType_A как Тип рассылки, OrderType_B как тип Интернета и OrderType_C как Тип телефона. Структура таблицы задана и не может быть изменена. Проблема здесь заключается в том, чтобы выяснить, как написать запрос. – user31673