Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите разобраться с соединением  [new]
Domninsky
Member

Откуда: Москва
Сообщений: 655
Добрый день.

Подскажите как правильно читать такой запрос?
Это вьюха из стороннего приложения не могу разобраться что тут с чем join-нится.

select *
from   dbo.LV_Depositor (nolock)
       inner join dbo.LV_UnitLang (nolock)
       inner join dbo.LV_ProductLS (nolock)
       inner join dbo.LV_ItemUnit (nolock)
       inner join dbo.LV_Product (nolock)
       inner join dbo.LV_LogStock (nolock)
            on  dbo.LV_Product.prd_ID = dbo.LV_LogStock.lsk_ProductID
       inner join dbo.LV_LogStockPackType (nolock)
            on  dbo.LV_LogStock.lsk_ID = dbo.LV_LogStockPackType.lsp_LogStockID		                
       left outer join dbo.LV_LogStockPackType as LSPT_CHILD (nolock) 
            on  dbo.LV_LogStockPackType.lsp_ID = LSPT_CHILD.lsp_ParentID
            on  dbo.LV_ItemUnit.itu_ID = dbo.LV_LogStockPackType.lsp_ItemUnitID
       inner join dbo.LV_Log (nolock)
            on  dbo.LV_LogStock.lsk_LogID = dbo.LV_Log.log_ID
       inner join dbo.LV_ProductLang (nolock)
            on  dbo.LV_Product.prd_ID = dbo.LV_ProductLang.prdl_ProductID	                   
       left outer join dbo.LV_ProductAttributesValues as PAV50(nolock)
       inner join dbo.LV_ProductAttributeList as PAL50(nolock)
            on  (PAV50.pav_attributeID = PAL50.pal_AttributeID)
            and (PAV50.pav_Value = PAL50.pal_Code)
       inner join dbo.LV_AttributeListValue as ALL50(nolock)
            on  (PAL50.pal_ID = ALL50.all_PrdAttrListID)
            and (ALL50.all_LanguageID = 4)
            on  (dbo.LV_Product.prd_ID = PAV50.pav_ProductID)
            and (PAV50.pav_attributeID = 50)                 
       inner join dbo.LV_ItemUnit as ITU_CU(nolock)
            on  (dbo.LV_Product.prd_ID = ITU_CU.itu_ProductID)
            and (ITU_CU.itu_ConsumerUnitLED <> 0)
       inner join dbo.LV_ItemPackType as IPT_CU(nolock)
            on  (ITU_CU.itu_ID = IPT_CU.ipt_ItemUnitID)
            on  dbo.LV_ProductLS.pls_ProductID = dbo.LV_Product.prd_ID
       inner join dbo.LV_Location (nolock)
            on  dbo.LV_LogStock.lsk_LocationID = dbo.LV_Location.loc_ID
       inner join dbo.LV_Unit (nolock)
            on  dbo.LV_ItemUnit.itu_UnitID = dbo.LV_Unit.unt_ID
            on  dbo.LV_UnitLang.untl_UnitID = dbo.LV_Unit.unt_ID
            on  dbo.LV_Depositor.dep_ID = dbo.LV_LogStock.lsk_DepositorID
       left outer join dbo.LV_Receipt (nolock)
            on  dbo.LV_Log.log_ReceiptID = dbo.LV_Receipt.rct_ID
       left outer join dbo.LV_Return (nolock)
            on  dbo.LV_Log.log_ReturnID = dbo.LV_Return.ret_ID
       left outer join dbo.V_PackTypeDescription LV_PackTypeContainer
       inner join dbo.LV_LogStockContainer (nolock)
            on  LV_PackTypeContainer.pkt_ID = dbo.LV_LogStockContainer.lsc_UnitID
            on  dbo.LV_LogStock.lsk_FromContainerID = dbo.LV_LogStockContainer.Lsc_ID
       left outer join dbo.LV_Host (nolock)
       inner join dbo.LV_Session (nolock)
            on  dbo.LV_Host.Hst_ID = dbo.LV_Session.ses_HostID
            on  dbo.LV_Log.log_SessionID = dbo.LV_Session.ses_ID
       left outer join dbo.V_User (nolock)
            on  dbo.LV_Log.log_UserID = dbo.V_User.usr_ID
       left outer join dbo.V_TransactionType (nolock)
            on  dbo.LV_Log.log_TransactionTypeID = dbo.V_TransactionType.trt_ID
       left outer join dbo.LV_StockReserveReason (nolock)
            on  dbo.LV_LogStock.lsk_ReserveReasonID = dbo.LV_StockReserveReason.srr_ID
       left outer join dbo.LV_UnsuitabilityReason (nolock)
            on  dbo.LV_LogStock.lsk_UnsuitReasonID = dbo.LV_UnsuitabilityReason.unr_ID		                   
       left outer join LV_ReceiptAttributesValues rav2(nolock)
            on  dbo.LV_Log.log_ReceiptID = rav2.rav_receiptID
            and rav2.rav_AttributeID = 15
where  (dbo.LV_LogStockPackType.lsp_ParentID is null)


Не привык к такой записи.
К примеру:

inner join dbo.LV_UnitLang (nolock)


в вверху, а условие соединения от него черте где снизу

on  dbo.LV_UnitLang.untl_UnitID = dbo.LV_Unit.unt_ID


Спасибо.
10 сен 14, 16:16    [16560232]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с соединением  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Эта запись не противоречит синтаксису.
10 сен 14, 16:21    [16560272]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с соединением  [new]
Domninsky
Member

Откуда: Москва
Сообщений: 655
Да то, что она корректная понятно, как ее правильно прочитать, чтоб понять, что с чем соединено?
10 сен 14, 16:38    [16560393]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с соединением  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Domninsky,

да как взять и читать.. можно текст переформатировать и распечать и карндашиком по бумажке провести лдинии...
10 сен 14, 16:42    [16560423]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с соединением  [new]
iap
Member

Откуда: Москва
Сообщений: 47198
Domninsky,

каждый JOIN связан с ближайшим справа ON, между которыми нет другого JOIN.
Это подобно открывающей и закрывающей скобкам.
10 сен 14, 17:02    [16560565]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с соединением  [new]
iap
Member

Откуда: Москва
Сообщений: 47198
iap
Domninsky,

каждый JOIN связан с ближайшим справа ON, между которыми нет другого JOIN.
Это подобно открывающей и закрывающей скобкам.
Точнее,
каждый JOIN связан с ближайшим справа ON, между которыми нет другого JOIN с соответствующим ему ON.
10 сен 14, 17:04    [16560576]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с соединением  [new]
Wlr-l
Member

Откуда:
Сообщений: 641
iap, это как else в Паскале: когда их много, то с виду все хорошо, но иногда работает не так как требуется. Как уже сказали скобки и форматирование помогут.
10 сен 14, 17:19    [16560688]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с соединением  [new]
iap
Member

Откуда: Москва
Сообщений: 47198
Wlr-l
iap, это как else в Паскале: когда их много, то с виду все хорошо, но иногда работает не так как требуется. Как уже сказали скобки и форматирование помогут.
Зачем скобки, если они лишние?
На самом деле форматирования достаточно.
10 сен 14, 17:30    [16560758]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с соединением  [new]
Wlr-l
Member

Откуда:
Сообщений: 641
iap, для сервера - да, лишние, но для человека такое количество таблиц может плохо сказаться на психике.
10 сен 14, 17:35    [16560786]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с соединением  [new]
Domninsky
Member

Откуда: Москва
Сообщений: 655
Спасибо.
10 сен 14, 17:54    [16560914]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с соединением  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4974
Domninsky,

Сделайте SELECT ... FOR XML AUTO, может оно в XML виде читабельным станет
10 сен 14, 18:39    [16561130]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить