【发布时间】:2014-02-08 01:09:06
【问题描述】:
这是我的 SQL
select DISTINCT d.* from Device d, Company c1
WHERE
EXISTS ( select * from (SELECT * FROM [dbo].[Split] ('HENNEPIN COUNTY MN', ',')) as s
WHERE c1.CompanyName like '%' + s.items + '%' AND d.CustomerID c1.CompanyID)
OR
EXISTS ( select * from (SELECT * FROM [dbo].[Split] ('HENNEPIN COUNTY MN', ',')) as s
WHERE d.CustomerName like '%' + s.items + '%')
在排序上,它将 OR 误解为笛卡尔积,您可以在此处阅读:http://www.scarydba.com/2009/09/15/no-join-predicate/
有什么办法可以避免这种情况?
【问题讨论】:
-
你能展示样本数据和想要的结果吗?设备和公司如何相关?也许您应该使用 UNION / UNION ALL 而不是在我看来像 CROSS JOIN 的东西?
-
公司和设备不相关吗?可以
from device d join company c1 on d.companyid = c1.companyid吗? -
正如汤姆所说,问题在于设备和公司没有与谓词连接。 OR 不是问题。
-
感谢菲尔的有用见解。
标签: sql sql-server-2008 join