私ができる限り最適化しようとしているクエリがあります。現在のものの代わりにジョインを使うことができますどこに)。T-SQL JOIN /別の結果を返す場所
現在、私のクエリは次のとおりです。
SELECT
cus.*
, com.COM_ID
, cha.CHA_NAME
FROM thing.dbo.VIEW_REPORT cus --View
LEFT JOIN otherthing.dbo.TBL_COMMUNICATION com
ON com.REC_ID = cus.REC_ID
AND com.RUN_ID = cus.RUN_ID
LEFT JOIN otherthing.dbo.TBL_CHANNEL cha
ON cha.CHA_ID = com.CHA_ID
WHERE com.COM_ID in (
SELECT eve.COM_ID
FROM otherthing.dbo.TBL_EVENT eve)
私はではなくTBL_EVENTために参加することによってこれを最適化しようとしているWHERE IN(私は、彼らが同じように実行して読んで信じて、私も欲しいですいくつかのTBL_EVENT列を選択して参加してください)。私はインナーそれだけTBL_COMMUNICATIONとTBL_EVENTの両方にある結果を返すだろうことを意味する参加使って考え出し
SELECT
cus.*
, com.COM_ID
, cha.CHA_NAME
FROM thing.dbo.VIEW_REPORT cus --View
LEFT JOIN otherthing.dbo.TBL_COMMUNICATION com
ON com.REC_ID = cus.REC_ID
AND com.RUN_ID = cus.RUN_ID
LEFT JOIN otherthing.dbo.TBL_CHANNEL cha
ON cha.CHA_ID = com.CHA_ID
INNER JOIN otherthing.dbo.TBL_EVENT eve
ON com.COM_ID = eve.COM_ID
:私の新しいクエリは、このようなものです。 これは物事が奇妙になる場所です。
元のクエリ(上部)は約200,000レコードを返します。私の新しいクエリは約1,100,000レコードを返します。しかし、私の見解では同じクエリなので、何が間違っているのか分かりません。 INNER JOINを他の左の結合の上にTBL_EVENTに移動しましたが、違いはありません。
TBL_EVENTに参加して同じデータを返すために何をすべきか教えてください。彼らは
WHERE com.COM_ID in (
SELECT eve.COM_ID
FROM otherthing.dbo.TBL_EVENT eve)
同じではありません
を投稿するには、行動に参加します。 – jarlh
COM_ID = 'Z'で、テーブル2に* 4 *レコードがあり、COM_ID = 'Z'であれば* 3 *レコードが存在する場合は、結果は3 x 4レコード= * 12 *レコードになります。どちらの表でもCOM_IDは一意ですか? –
COM_IDはTBL_COMMUNICATIONでユニークです。私はあなたが言っていることを理解しているので、今はSELECT DISTINCTを試しています。理論的には同じ量を返すべきです。 (つまり、正しい量) –