如何在INNER JOIN之前执行WHERE子句

Nig*_*ker 5 sql sql-server inner-join

我怎么这样查询?

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
Run Code Online (Sandbox Code Playgroud)

DT.DeviceID = '1339759958'在开始使用内连接之前我需要做.我使用sql server.

Dav*_*dge 9

我发现很难相信它会有所不同.查询优化器应该在连接之前应用谓词,如果它计算出这样做更有效.您可能需要执行此操作的唯一情况是优化器做出错误选择(至少对于内部联接 - 外部联接有效的情况).

  • 100%同意!你不应该这样做; 优化器会自动完成.因为您提出这个问题我相信您不会使用提示和其他高级员工对您的请求进行一些手动优化.只是为了说清楚你的请求必须从DeviceTrace中选择Distinct Station,Slot,SubSlot,CompID,CompName作为DT内部连接CompList作为CL where和DT.CompID = CL.CompID和DT.DeviceID ='1339759958' (3认同)

Joh*_*Woo 5

尝试添加in 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'
Run Code Online (Sandbox Code Playgroud)

在这种情况下,由于您正在执行操作,因此结果是相同的INNER JOIN。在右侧表上ON执行LEFT JOIN和过滤时,在子句中添加条件可能会非常不同。