Syntax 具有多个表的左外部联接vs NOT EXISTS语法

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

我正在对我的SSRS本机实例进行性能故障排除。我希望有一个简单的语法问题。我正在对使用左外部联接时的执行计划进行故障排除,但该联接不存在。我知道两者之间的区别,希望我的解决方案可能不存在,但我有一个问题。这是我的问题

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的语法吗?