Syntax 具有多个表的左外部联接vs NOT EXISTS语法
我正在对我的SSRS本机实例进行性能故障排除。我希望有一个简单的语法问题。我正在对使用左外部联接时的执行计划进行故障排除,但该联接不存在。我知道两者之间的区别,希望我的解决方案可能不存在,但我有一个问题。这是我的问题Syntax 具有多个表的左外部联接vs NOT EXISTS语法,syntax,sql-server-2012,left-join,ssrs-2012,not-exists,Syntax,Sql Server 2012,Left Join,Ssrs 2012,Not Exists,我正在对我的SSRS本机实例进行性能故障排除。我希望有一个简单的语法问题。我正在对使用左外部联接时的执行计划进行故障排除,但该联接不存在。我知道两者之间的区别,希望我的解决方案可能不存在,但我有一个问题。这是我的问题 SELECT [Facility] ,[CategoryDesc] ,[SubCategoryDesc] ,[ItemKey] ,[ItemDesc] ,[HeadCount] ,[Group] ,[Group Name] ,[CustomerKey
SELECT [Facility]
,[CategoryDesc]
,[SubCategoryDesc]
,[ItemKey]
,[ItemDesc]
,[HeadCount]
,[Group]
,[Group Name]
,[CustomerKey]
,[Customer]
,[InvoiceNo]
,[InvoiceDate]
,[OrderNo]
,[OrderDate]
,[FiscalYear]
,[Quarter]
,[WeekNo]
,[SalesmanID]
,[Salesman]
,[ReasonCodeKey]
,[Weight]
,[Box]
,[Value]
,[OrderStatus]
,[PONumber]
,[SubCategoryKey]
,[DispatchCenterOrderKey]
,[PromotionFlag]
,[CategoryKey]
,b.UserID
FROM [FinancialData].[dbo].[FactSalesHistoryDetail] a
LEFT OUTER JOIN [FinancialData].[dbo].[DimSalesRepUserIDMap] b on b.SalesRepID = a.SalesmanID
我希望用这个来代替:
SELECT [Facility]
,[CategoryDesc]
,[SubCategoryDesc]
,[ItemKey]
,[ItemDesc]
,[HeadCount]
,[Group]
,[Group Name]
,[CustomerKey]
,[Customer]
,[InvoiceNo]
,[InvoiceDate]
,[OrderNo]
,[OrderDate]
,[FiscalYear]
,[Quarter]
,[WeekNo]
,[SalesmanID]
,[Salesman]
,[ReasonCodeKey]
,[Weight]
,[Box]
,[Value]
,[OrderStatus]
,[PONumber]
,[SubCategoryKey]
,[DispatchCenterOrderKey]
,[PromotionFlag]
,[CategoryKey]
,b.UserID
FROM [FinancialData].[dbo].[FactSalesHistoryDetail] a
WHERE NOT EXISTS (SELECT 1 FROM FinancialData.dbo.DimSalesRepUserIDMap b WHERE b.SalesRepID = a.SalesmanID)
问题是,最后一列“b.UserID”使用左外部连接来获取其别名。当使用上一个查询时,我得到的“多部分标识符”b.UserID无法绑定。很明显,这是因为我删除了对此表的调用。如果我以这种方式包含它…它花费的时间太长,并且不是我期望收到的
FROM [FinancialData].[dbo].[FactSalesHistoryDetail] a, FinancialData.dbo.DimSalesRepUserIDMap b
WHERE NOT EXISTS (SELECT 1 FROM FinancialData.dbo.DimSalesRepUserIDMap b WHERE b.SalesRepID = a.SalesmanID)
因此,问题是如何设置格式,以便在引用其他表中的多个列的同时使用NOT EXISTS(不存在)或EXISTS(存在)优化性能?此时,左联接是最佳选择。最后一个查询将生成结果,但会影响性能。顺便问一下,您是否尝试了交叉联接?如果需要包含b.UserID则您别无选择,只能进行加入。即使是[FinancialData].[dbo].[FactSalesHistoryDetail]a,FinancialData.dbo.DimSalesRepuseSeridMap b是一种较旧的联接语法。我建议使用原始的左外部联接,并使用执行计划来确定是否需要在表上放置任何索引。我认为SalesRepID需要在两个表上都建立索引,索引的包含部分应该包括SELECT pa中的列语句的rt。祝你好运!在左后指定OUTER是可选语法。LEFT和LEFT-OUTER的意思都是一样的。我没有,你能给我看看这个Ajith的语法吗?