Sql server 2008 无连接谓词警告-为什么此查询从未完成/超时?
以下是我得到“无连接谓词”警告的查询: 基本上,我有两个查询,我想用OR连接它们(从这两个查询中获得结果)。我相信它试图将这两个查询作为笛卡尔积连接起来,这不是我想要的Sql server 2008 无连接谓词警告-为什么此查询从未完成/超时?,sql-server-2008,dynamic-sql,Sql Server 2008,Dynamic Sql,以下是我得到“无连接谓词”警告的查询: 基本上,我有两个查询,我想用OR连接它们(从这两个查询中获得结果)。我相信它试图将这两个查询作为笛卡尔积连接起来,这不是我想要的 如果我将其分为两个查询并UNION结果,则速度很快。然而,这让我重新构造了我的动态SQL。我想把它格式化,这样我可以在那里有一个或,或者如果需要的话有一个和。括号不正确。它们应该如下所示,以便它知道整个OR中的d是相同的 select DISTINCT d.* from Device d , Company c1 WHERE
如果我将其分为两个查询并
UNION
结果,则速度很快。然而,这让我重新构造了我的动态SQL。我想把它格式化,这样我可以在那里有一个或,或者如果需要的话有一个和。括号不正确。它们应该如下所示,以便它知道整个OR中的d是相同的
select DISTINCT d.* from Device d , Company c1
WHERE d.CustomerID = c1.CompanyID AND
(
c1.CompanyNumber in (SELECT * FROM [dbo].[Split] ('56257100', ','))
OR
EXISTS ( select * from (SELECT * FROM [dbo].[Split] ('American', ',')) as s
WHERE d.CustomerID = c1.CompanyID AND c1.CompanyName like '%' + s.items + '%' )
)
或者经常比联合行动慢得多。从工会开始是更好的做法。
select DISTINCT d.* from Device d , Company c1
WHERE d.CustomerID = c1.CompanyID AND
(
c1.CompanyNumber in (SELECT * FROM [dbo].[Split] ('56257100', ','))
OR
EXISTS ( select * from (SELECT * FROM [dbo].[Split] ('American', ',')) as s
WHERE d.CustomerID = c1.CompanyID AND c1.CompanyName like '%' + s.items + '%' )
)