如何在WHERE子句中引用在T-SQL中执行查询过程中创建的变量?
标题上说的,真的如何在WHERE子句中引用在T-SQL中执行查询过程中创建的变量?,sql,tsql,Sql,Tsql,标题上说的,真的 如果我选择[statement]作为WHERE,为什么我不能引用WHERE子句主体中的WHERE列?有什么解决办法吗?就我所知,您不能直接在SQL Server中执行此操作 如果确实必须在WHERE子句中使用列别名,则可以这样做,但仅对别名使用子查询似乎有些过分: SELECT * FROM ( SELECT [YourColumn] AS YourAlias, etc... FROM Whatever ) YourSubquery WHERE YourAlia
如果我选择[statement]作为WHERE,为什么我不能引用WHERE子句主体中的WHERE列?有什么解决办法吗?就我所知,您不能直接在SQL Server中执行此操作 如果确实必须在WHERE子句中使用列别名,则可以这样做,但仅对别名使用子查询似乎有些过分:
SELECT *
FROM
(
SELECT [YourColumn] AS YourAlias, etc...
FROM Whatever
) YourSubquery
WHERE YourAlias > 2
几乎可以肯定,在WHERE子句中使用原始列的内容会更好。据我所知,在SQL Server中无法直接执行此操作 如果确实必须在WHERE子句中使用列别名,则可以这样做,但仅对别名使用子查询似乎有些过分:
SELECT *
FROM
(
SELECT [YourColumn] AS YourAlias, etc...
FROM Whatever
) YourSubquery
WHERE YourAlias > 2
几乎可以肯定,在WHERE子句中使用原始列的内容会更好。这与SELECT语句转换为抽象查询树的方式有关:“whatever”只出现在树的查询结果投影部分,即树的过滤部分上方,因此WHERE子句不能理解“WHERE”。这不是一些内部实现细节,而是关系查询的一个基本行为:结果的投影发生在连接和过滤器的计算之后 通过明确查询的层次结构来解决“问题”确实很简单:
select ...
from (
select [something] as whatever
from ...
) as subquery
WHERE whatever = ...;
公共表表达式也可以用于相同的目的:
with cte as (
select [something] as whatever
from ...)
select ... from cte
WHERE whatever = ...;
它与SELECT语句转换为抽象查询树的方式有关:“whatever”只出现在树的查询结果投影部分中,该部分位于树的过滤部分之上,因此WHERE子句无法理解“whatever”。这不是一些内部实现细节,而是关系查询的一个基本行为:结果的投影发生在连接和过滤器的计算之后 通过明确查询的层次结构来解决“问题”确实很简单:
select ...
from (
select [something] as whatever
from ...
) as subquery
WHERE whatever = ...;
公共表表达式也可以用于相同的目的:
with cte as (
select [something] as whatever
from ...)
select ... from cte
WHERE whatever = ...;
这与select语句中的操作顺序有关。WHERE子句在SELECT子句之前求值,因此此信息不可用。尽管它在ORDERBY子句中可用,因为它是最后处理的
正如其他人提到的,子查询可以解决这个问题。它与select语句中的操作顺序有关。WHERE子句在SELECT子句之前求值,因此此信息不可用。尽管它在ORDERBY子句中可用,因为它是最后处理的 正如其他人提到的,子查询可以解决这个问题