2011-11-03 87 views
7

我要问,如何能在SELECT查询中使用别名,使用别名在选择查询

我需要这个

SELECT (Complex SubQuery) AS A, (Another Sub Query WHERE ID = A) FROM TABLE 
+4

我怀疑答案是改变你的'复SubQuery'标量表达式为表表达式,但很难调试我们看不到的代码。 – onedaywhen

+0

我同意你的意见。我需要使这个查询有效。 – user960567

回答

12

你不能做到这一点:

SELECT (Complex SubQuery) AS A, (Another Sub Query WHERE ID = A) FROM TABLE 

但是,您可以做此:

SELECT (Another Sub Query WHERE ID = A.somecolumn) 
FROM table 
JOIN SELECT (Complex SubQuery) AS A on (A.X = TABLE.Y) 

SELECT (Another Sub Query) 
FROM table 
WHERE table.afield IN (SELECT Complex SubQuery.otherfield) 

问题在于,您不能在SELECT和WHERE子句中引用像这样的别名,因为它们不会在执行select或where部分时进行评估。
也可以使用having子句,但子句不使用索引,应尽可能避免。

+0

??也许你的意思是:'WHERE ID = A.SomeColumn' –

+0

你(和OP)使用'A'作为表别名和列别名(在不同的地方)。 –

+0

@ypercube,现在修复它。 – Johan

2

你可以重写查询这样

SELECT Complex.A, (Another Sub Query WHERE ID = Complex.A) 
FROM TABLE 
CROSS JOIN ((Complex SubQuery) AS A) Complex 
0

另一种解决方案,您可以使用:

SELECT (Complex SubQuery) AS A, (Another Sub Query WHERE ID = A) 
FROM 
TABLE MAIN 
OUTER APPLY (SELECT (Complex SubQuery) AS A)