このようにクエリを実行するにはどうすればよいですか?
select Distinct Station , Slot , SubSlot, CompID , CompName
from DeviceTrace as DT DT.DeviceID = '1339759958'
inner join CompList as CL
where and DT.CompID = CL.CompID
内部結合を開始する前に、DT.DeviceID = '1339759958'
を実行する必要があります。私はSQLサーバーを使用しています。
それが何か違いを生むとは信じがたいです。クエリオプティマイザーは、結合がより効率的であると計算した場合、結合の前に述語を適用する必要があります。これを行う必要がある唯一の状況は、オプティマイザーが誤った選択を行った場合です(少なくとも内部結合の場合-外部結合には有効なケースがあります)。
ON
句を追加してみてください。
SELECT DISTNCT Station, Slot, SubSlot, CompID, CompName
FROM DeviceTrace AS DT INNER JOIN CompList AS CL
ON DT.CompID = CL.CompID AND
DT.DeviceID = '1339759958'
この場合、INNER JOIN
を実行しているため、結果は同じです。 ON
句に条件を追加することは、LEFT JOIN
を実行し、右側のテーブルでフィルタリングする場合とは大きく異なる可能性があります。
サブクエリを使用して、where
の前にjoin
句を適用できます。
select *
from (
select *
from DeviceTrace
where DeviceID = '1339759958'
) as DT
inner join
CompList as CL
on DT.CompID = CL.CompID
この場合、サブクエリ、on
句、または最後のwhere
でフィルタリングするかどうかは重要ではありません。
デビッドオルドリッジから答えるための小さな説明。クエリを使用する必要があります
select Distinct Station , Slot , SubSlot, CompID , CompName
from DeviceTrace as DT
inner join CompList as CL on DT.CompID = CL.CompID
where DT.DeviceID = '1339759958'