Ric*_*sen 8 sql sql-server join
我正在创建两个表的连接视图,但是从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
Run Code Online (Sandbox Code Playgroud)
有没有办法与连接类似的东西来加快性能?
我正在使用SQL Server 2008 R2.
我接近以下代码(约.5秒),但是'Distinct'仅在所有列重复时过滤掉记录(而不仅仅是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
Run Code Online (Sandbox Code Playgroud)
表格示例
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
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,返回的记录应该是id5/P4/AB4,id2/P10/AB2和(id1/P1/AB1或id1/P5/AB5)
我的搜索提出了类似的问题,但没有解决我的问题. 链接,链接
预先感谢您的帮助.这是我的第一篇文章,如果我违反任何规则,请告诉我.
RBa*_*ung 14
这将给出您请求的结果,并且应该具有最佳性能.
SELECT
OBJECTID
, PKID
, t2.SUBDIVISIO,
, t2.ASBUILT1
FROM dbo.table1 AS t1
OUTER APPLY (
SELECT TOP 1 *
FROM dbo.table2 AS t2
WHERE t1.PKID = t2.FKID
) AS t2
Run Code Online (Sandbox Code Playgroud)