我怎么这样查询?
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 server。
答案 0 :(得分:7)
我发现很难相信这会有所不同。查询优化器应该在连接之前应用谓词,如果它计算出这样做更有效。您可能需要执行此操作的唯一情况是优化器做出错误选择(至少对于内部联接 - 外部联接有效的情况)。
答案 1 :(得分:4)
尝试添加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
子句中添加条件可能会有很大差异。
答案 2 :(得分:1)
David Aldridge回答的一个小小的澄清。您必须使用查询
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'
答案 3 :(得分:0)
您可以使用子查询在where
之前应用join
子句:
select *
from (
select *
from DeviceTrace
where DeviceID = '1339759958'
) as DT
inner join
CompList as CL
on DT.CompID = CL.CompID
虽然在这种情况下,您是否在子查询,on
子句或最终where
中进行过滤无关紧要。
答案 4 :(得分:0)
你可以试试这个:
select Distinct Station, Slot, SubSlot, CompID, CompName
from (select * from DeviceTrace where DeviceID = '1339759958') as DT
inner join CompList as CL ON DT.CompID = CL.CompID