SSMS 2008 R2 を使用して TSQL クエリを開発しており、現在多くの左結合を使用しているこの sproc を最適化したいと考えています。1 つの行/ルックアップ値を含むルックアップ テーブルがあります。したがって、私の TSQL コードは次のようになります。
Table A = main record table
Table B = Lookup Table
row1 x unique_identifier, y varchar(100)
row2 x unique_identifier, y varchar(100)
row3 x unique_identifier, y varchar(100)
row4 x unique_identifier, y varchar(100)
したがって、このルックアップ テーブルの各行には 2 つの値があります。1 つは unique_identifier で、もう 1 つは varchar です。現在、私の sproc コードは次のようになっています。
select *
FROM A
LEFT JOIN B ON B.X = A.X WHERE B.X = 123456
LEFT JOIN B2 ON B2.X = A.X WHERE B2.X = 123457
LEFT JOIN B3 ON B3.X = A.X WHERE B3.X = 123458
LEFT JOIN B4 ON B4.X = A.X WHERE B4.X = 123459
LEFT JOIN B5 ON B5.X = A.X WHERE B5.X = 123451
ただし、これを行うためのより効率的な方法があるはずです。そして、私の実際の sproc コードは、実際にはこのルックアップ テーブルに 5 回ではなく 30 回参加しています。一時テーブルも使用してみましたが、最適化されていないようです。すべての LEFT JOIN を置き換える方法に関する推奨事項はありますか?
わかりましたので、今この質問を更新しています。これは私の正確なクエリです:
SELECT DISTINCT
lut.[description] as UDT_Injuries,
lut2.[description] as abduction,
lut3.[description] as ARREST_PARENT
FROM evolv_cs.dbo.incident_header_x x with (nolock)
LEFT JOIN user_defined_lut_rv lut on lut.user_defined_lut_id = x.UDT_Injuries
LEFT JOIN user_defined_lut_rv lut2 on lut2.user_defined_lut_id = x.ABDUCTION
LEFT JOIN user_defined_lut_rv lut3 on lut3.user_defined_lut_id = x.ARREST_PARENT
WHERE lut.[description] IS NOT NULL OR lut2.[description] IS NOT NULL OR lut3.[description] IS NOT NULL
このクエリの出力の最初の 10 行:
UDT_Injuries abduction ARREST_PARENT
NULL NULL Outside of facility
Client NULL NULL
Client NULL Outside of facility
None NULL NULL
None NULL Outside of facility
Other adult NULL NULL
Other adult NULL Outside of facility
Parent NULL NULL
Peer NULL NULL
Sibling NULL NULL
参考までに、PIVOT と UNPIVOT に関する記事を見ましたが、データを集計したくありません。代わりに、incident_header_x のキー ID 値を user_defined_lut_rv の varchar 値に変換したいと考えています。
incident_header_x のサンプル データは次のようになります。
UDT_Injuries ABDUCTION ARREST_PARENT
5B84773B-99BF-4EB9-8545-EFC06A35FE29 NULL NULL
NULL 4F18EDE9-BBBA-4430-9EF4-4E28EAC1E6D4 NULL
5B84773B-99BF-4EB9-8545-EFC06A35FE29 NULL NULL
NULL NULL 4F18EDE9-BBBA-4430-9EF4-4E28EAC1E6D4
NULL NULL 5B84773B-99BF-4EB9-8545-EFC06A35FE29
これは、私が達成しようとしていることを意味していますか? これらの id 値を user_defined_lut_rv ルックアップ テーブルの varchar 値に変換するには?