7

このようなクエリを実行するにはどうすればよいですか?

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サーバーで作業しています。

4

5 に答える 5

11

それが違いを生むとは信じがたい。クエリ オプティマイザは、結合の前に述語を適用する方が効率的であると判断した場合に、述語を適用する必要があります。これを行う必要がある唯一の状況は、オプティマイザーが誤った選択をした場合です (少なくとも内部結合の場合 -- 外部結合には有効なケースがあります)。

于 2013-05-19T08:56:15.287 に答える
10

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

于 2013-05-19T08:51:40.490 に答える
2

サブクエリを使用して、次のwhere前に句を適用できますjoin

select  *
from    (
        select  *
        from    DeviceTrace
        where   DeviceID = '1339759958' 
        ) as DT 
inner join 
        CompList as CL  
on      DT.CompID = CL.CompID

onこの場合、サブクエリ、句、または final でフィルタリングするかどうかは重要ではありませんwhere

于 2013-05-19T08:53:21.257 に答える