0

这有效:

select
    x.long_name as ln
from x
join y on y.ln = x.long_name

这不会:

select
    x.long_name as ln
from x
join y on y.ln = x.ln

它可以以某种方式工作吗?以一种简单而紧凑的方式?这很方便,因为我正在生成过滤器表(y将是一个过滤器表)并以编程方式进行查询。

4

2 回答 2

3

您可以使用applyfrom子句中定义别​​名:

select v.ln
from x cross apply
     (values (x.long_name)) v(ln) join
     y
     on y.ln = v.ln

其他替代方法是子查询和 CTE。

于 2020-01-15T21:51:49.397 回答
3

您需要使用“表表达式”来使用“结果集”中的列。

select *
from ( -- here we create a table expression named "z"
  select
    long_name as ln
  from x
) z
join y on y.ln = z.ln

如您所见,表表达式“z”具有您想要的列。

于 2020-01-15T21:53:00.503 回答