我怎么做这样的查询?
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 服务器。
我怎么做这样的查询?
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 服务器。
我觉得很难相信这有什么不同。如果查询优化器计算出这样做更有效,则应该在连接之前应用谓词。您可能需要这样做的唯一情况是优化器做出错误的选择(至少对于内部联接——外部联接存在有效情况)。
尝试添加 inON
子句。
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
您可以使用子查询在 awhere
之前应用子句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'
你可以试试这个:
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