Sql 在多部分from语句中命名表
我正在运行一个查询,其中有3个独立标识符的表变量。我想交叉连接它们以匹配另一个表中的每个组合 这个很好Sql 在多部分from语句中命名表,sql,sql-server,Sql,Sql Server,我正在运行一个查询,其中有3个独立标识符的表变量。我想交叉连接它们以匹配另一个表中的每个组合 这个很好 select i.*, d.* from @ids as i, @dates as d, @values as v 但是当我跑的时候 select i.*, d.* from @ids as i, @dates as d, @values as v join other_table as ot with (nolock) on i.id_ = ot.someid a
select i.*, d.*
from @ids as i, @dates as d, @values as v
但是当我跑的时候
select i.*, d.*
from @ids as i, @dates as d, @values as v
join other_table as ot with (nolock)
on i.id_ = ot.someid
and d.date_ = ot.somedate
and v.item_ = ot.someitem
只有最后一个表v被识别,我得到
Msg 4104, Level 16, State 1, Line 10084
The multi-part identifier "d.date_" could not be bound.
Msg 4104, Level 16, State 1, Line 10085
The multi-part identifier "v.item_" could not be bound.
这样做的适当方法是什么?简单规则。请勿在FROM子句中使用逗号。始终使用正确的显式联接语法
在您的情况下,您需要交叉连接:
逗号与交叉连接并不完全相同。除了生成表中行的笛卡尔乘积外,它还具有范围界定含义。基本上,逗号分隔FROM子句中的名称空间。因此,逗号之前定义的表/别名在逗号之后不可用。当然,它们可以在查询中的其他子句中使用,例如WHERE
select i.*, d.*
from @ids i cross join
@dates d cross join
@values v join
other_tabl ot
on i.id_ = ot.someid and
d.date_ = ot.somedate snf
v.item_ = ot.someitem;