Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
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] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37139 |
Эта запись не противоречит синтаксису. |
10 сен 14, 16:21 [16560272] Ответить | Цитировать Сообщить модератору |
Domninsky Member Откуда: Москва Сообщений: 655 |
Да то, что она корректная понятно, как ее правильно прочитать, чтоб понять, что с чем соединено? |
10 сен 14, 16:38 [16560393] Ответить | Цитировать Сообщить модератору |
Maxx Member [скрыт] Откуда: Сообщений: 24290 |
Domninsky, да как взять и читать.. можно текст переформатировать и распечать и карндашиком по бумажке провести лдинии... |
10 сен 14, 16:42 [16560423] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47045 |
Domninsky, каждый JOIN связан с ближайшим справа ON, между которыми нет другого JOIN. Это подобно открывающей и закрывающей скобкам. |
10 сен 14, 17:02 [16560565] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47045 |
каждый JOIN связан с ближайшим справа ON, между которыми нет другого JOIN с соответствующим ему ON. |
||
10 сен 14, 17:04 [16560576] Ответить | Цитировать Сообщить модератору |
Wlr-l Member Откуда: Сообщений: 523 |
iap, это как else в Паскале: когда их много, то с виду все хорошо, но иногда работает не так как требуется. Как уже сказали скобки и форматирование помогут. |
10 сен 14, 17:19 [16560688] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47045 |
![]() На самом деле форматирования достаточно. |
||
10 сен 14, 17:30 [16560758] Ответить | Цитировать Сообщить модератору |
Wlr-l Member Откуда: Сообщений: 523 |
iap, для сервера - да, лишние, но для человека такое количество таблиц может плохо сказаться на психике. |
10 сен 14, 17:35 [16560786] Ответить | Цитировать Сообщить модератору |
Domninsky Member Откуда: Москва Сообщений: 655 |
Спасибо. |
10 сен 14, 17:54 [16560914] Ответить | Цитировать Сообщить модератору |
a_voronin Member Откуда: Москва Сообщений: 4807 |
Domninsky, Сделайте SELECT ... FOR XML AUTO, может оно в XML виде читабельным станет |
10 сен 14, 18:39 [16561130] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |