“超时已过期”救命啊!!!

老田低代码 2005-08-26 03:39:50
根据客户的需求定制了张报表,其中Left Join同一个表很多次:
SELECT .......
FROM ((((Policy p LEFT JOIN
Carrier AS c ON p.CarrierID = c.CarrierID) LEFT JOIN
Customer AS u ON p.CustomerID = u.CustID) LEFT JOIN
ProductType AS r ON p.ProdTypeID = r.ProdTypeID) LEFT JOIN
Sales AS s ON p.SalesID = s.SalesID) LEFT JOIN
Branch B ON B.BranchId = P.Branchid LEFT JOIN
SourceType ST ON ST.SourceTypeid = p.SourceTypeid LEFT JOIN
(SELECT *
FROM TargetData
WHERE PropertyID = 1) v1 ON p.PolicyID = v1.PolicyID LEFT JOIN
(SELECT *
FROM TargetData
WHERE PropertyID = 2) v2 ON p.PolicyID = v2.PolicyID LEFT JOIN
(SELECT *
FROM TargetData
WHERE PropertyID = 3) v3 ON p.PolicyID = v3.PolicyID LEFT JOIN
(SELECT *
FROM TargetData
WHERE PropertyID = 4) v4 ON p.PolicyID = v4.PolicyID LEFT JOIN
(SELECT *
FROM TargetData
WHERE PropertyID = 5) v5 ON p.PolicyID = v5.PolicyID LEFT JOIN
(SELECT *
FROM TargetData
WHERE PropertyID = 6) v6 ON p.PolicyID = v6.PolicyID LEFT JOIN
(SELECT *
FROM TargetData
WHERE PropertyID = 7) v7 ON p.PolicyID = v7.PolicyID LEFT JOIN
(SELECT *
FROM TargetData
WHERE PropertyID = 9) v8 ON p.PolicyID = v8.PolicyID LEFT JOIN
(SELECT *
FROM TargetData
WHERE PropertyID = 10) v9 ON p.PolicyID = v9.PolicyID LEFT JOIN
(SELECT *
FROM TargetData
WHERE PropertyID = 11) v10 ON p.PolicyID = v10.PolicyID LEFT JOIN
(SELECT *
FROM TargetData
WHERE PropertyID = 13) v11 ON p.PolicyID = v11.PolicyID LEFT JOIN
(SELECT *
FROM TargetData
WHERE PropertyID = 14) v12 ON p.PolicyID = v12.PolicyID LEFT JOIN
(SELECT *
FROM TargetData
WHERE PropertyID = 19) v13 ON p.PolicyID = v13.PolicyID LEFT JOIN
(SELECT *
FROM TargetData
WHERE PropertyID = 26) v14 ON p.PolicyID = v14.PolicyID LEFT JOIN
(SELECT *
FROM TargetData
WHERE PropertyID = 27) v15 ON p.PolicyID = v15.PolicyID LEFT JOIN
(SELECT *
FROM TargetData
WHERE PropertyID = 28) v16 ON p.PolicyID = v16.PolicyID LEFT JOIN
(SELECT *
FROM TargetData
WHERE PropertyID = 29) v17 ON p.PolicyID = v17.PolicyID LEFT JOIN
(SELECT *
FROM TargetData
WHERE PropertyID = 30) v18 ON p.PolicyID = v18.PolicyID LEFT JOIN
(SELECT *
FROM TargetData
WHERE PropertyID = 31) v19 ON p.PolicyID = v19.PolicyID
WHERE .......

其中V1到V19都是同一个表的别名,但是总是容易出现“超时已过期”这样的错误提示,我已经想办法将ADODB.Connection对象的TimeOut设置比较大了还是容易出现这样的提示。
我也知道同时Left Join这么多的表实在是不明智,但是没有办法啊,客户需求,所以我想请教各位大侠、前辈们有没有什么比较好的方法来对这个语句进行优化。。。。
...全文
191 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
henry_gz 2005-08-27
  • 打赏
  • 举报
回复
可以用case 来完成.
ilons1 2005-08-27
  • 打赏
  • 举报
回复
可以试试,只left join 一次,在字段列表中取数据时,用case来完成,

没有整体的要求,不好帮到你
老田低代码 2005-08-26
  • 打赏
  • 举报
回复
WangZWang(阿来):我从V1到V19的这个Left Join是这样的,就是假设Policy 表中的一条记录在TargetData表中对应19条记录,我希望将这19条记录中的某个字段提取出来然后和Policy中的其他记录一起排列成客户需求的报表。。。。
WangZWang 2005-08-26
  • 打赏
  • 举报
回复
不知道你的结构,和设计的思想,所以无从help you!
老田低代码 2005-08-26
  • 打赏
  • 举报
回复
WangZWang(阿来):我也想进行优化,但是我实在是没有这方面的太多经验,请您指教!!
WangZWang 2005-08-26
  • 打赏
  • 举报
回复
把这条语句优化一下,重复访问表TargetData多次,在效率上肯定慢。

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧