SQL - 从左连接中删除重复项

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)