【发布时间】:2013-05-14 00:43:23
【问题描述】:
我如何进行这样的查询?
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 服务器。
【问题讨论】:
-
SQL 语法不是这样工作的。并假设这些条款的运行方式与您编写它们的方式一样......充其量只是简单化。过滤很可能发生在连接条件之前(如果查询优化器很好并且统计数据指向该方向)。
-
Night Walker:如果您在使用此查询时遇到性能问题(例如,在
Nested Loop/Hash/Merge Join之后有一个Filter运算符),您应该在其中发布执行计划和 DDL 语句(对于表和索引)结束当前问题后的另一个问题。 -
似乎高级用户正在阅读这篇文章以了解查询优化器的详细信息。但看起来 OP 只是想过滤 DeviceID。不知道这怎么可能“没有建设性”。
-
@NightWalker 你能澄清一下这个问题吗?你需要什么以及为什么需要它? (是性能问题,代码优雅问题,还是其他问题……?)就目前而言,它不是很清楚,这会导致矛盾和扩展讨论。
-
“似乎”SELECT的语法(
SELECT ... FROM ... WHERE ...)和逻辑执行顺序(FROM/"joins" > ON, WHERE, GROUP BY, ...)无法更改。
标签: sql sql-server inner-join