我正在创建两个表的连接视图,但是从 table2 中得到了不需要的重复项。
例如:table1 有 9000 条记录,我需要结果视图包含完全相同的记录;table2 可能有多个具有相同 FKID 的记录,但我只想返回一条记录(我的客户可以随机选择)。我有以下代码可以正常工作,但性能比预期慢(超过 14 秒)。
SELECT
OBJECTID
, PKID
,(SELECT TOP (1) SUBDIVISIO
FROM dbo.table2 AS t2
WHERE (t1.PKID = t2.FKID)) AS ProjectName
,(SELECT TOP (1) ASBUILT1
FROM dbo.table2 AS t2
WHERE (t1.PKID = t2.FKID)) AS Asbuilt
FROM dbo.table1 AS t1
有没有办法对连接做类似的事情来提高性能?
我正在使用 SQL Server 2008 R2。
我接近了以下代码(约 0.5 秒),但“不同”仅在所有列重复时过滤掉记录(而不仅仅是 FKID)。
SELECT
t1.OBJECTID
,t1.PKID
,t2.ProjectName
,t2.Asbuilt
FROM dbo.table1 AS t1
LEFT JOIN (SELECT
DISTINCT FKID
,ProjectName
,Asbuilt
FROM dbo.table2) t2
ON t1.PKID = t2.FKID
表格示例
table1 table2
OID, PKID FKID, ProjectName, Asbuilt
1, id1 id1, P1, AB1
2, id2 id1, P5, AB5
3, id4 id2, P10, AB2
5, id5 id5, P4, AB4
在上面的示例中,返回的记录应该是 id5/P4/AB4、id2/P10/AB2 和 (id1/P1/AB1 OR id1/P5/AB5)
我的搜索提出了类似的问题,但没有一个能解决我的问题。 链接,链接
在此先感谢您的帮助。这是我的第一篇文章,如果我违反了任何规则,请告诉我。