2 つのテーブルの結合ビューを作成していますが、table2 から不要な重複が発生しています。
例: table1 には 9000 レコードがあり、結果のビューにまったく同じものを含める必要があります。table2 には同じ FKID を持つ複数のレコードが含まれている可能性がありますが、1 つのレコードのみを返したいと考えています (顧客はランダムに選択しても問題ありません)。正しく動作する次のコードがありますが、パフォーマンスが必要以上に遅くなります (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 を使用しています。
次のコード (~.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
テーブルの例
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) である必要があります。
私の検索では同様の質問が出てきましたが、問題を解決するものはありませんでした。 リンク,リンク
よろしくお願いします。これは私の最初の投稿なので、ルールを破っている場合はお知らせください。