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

尝试添加 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

于 2013-05-19T08:51:40.490 回答
2

您可以使用子查询在 awhere之前应用子句join

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

尽管在这种情况下,您是否过滤子查询、on子句甚至最终的where.

于 2013-05-19T08:53:21.257 回答
1

大卫奥尔德里奇回答的一个小澄清。您必须使用查询

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'
于 2013-05-19T09:09:36.393 回答
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
于 2021-06-13T00:02:15.173 回答