SQL Server内部查询问题

时间:2011-02-11 13:06:05

标签: sql sql-server-2005 tsql

我在SQL Server中有一个非常简单的查询。但这是错误的。

select * from(
 select emp_name + ' ' + emp.surname as employee from ca_contact
)

此查询无效。 但是,当我写下面的内容时,它正在起作用:

select emp_name + ' ' + emp.surname as employee from ca_contact

4 个答案:

答案 0 :(得分:2)

你需要一个别名。在这种情况下foobar

select * from
   (select emp_name + ' ' + emp.surname as employee from ca_contact) foobar

答案 1 :(得分:1)

我认为您需要指定表别名 -

select * from(
 select emp_name + ' ' + emp.surname as employee from ca_contact
) t1

答案 2 :(得分:0)

在SQL Server中,必须为所有派生表提供别名[例外情况是,如果不从中选择任何内容,例如在IN/EXISTS条款中。从SQL Server 2005开始,您正在执行的操作的替代方法是使用公用表表达式,顺便提一下,现在在最新版本的Oracle中也可以使用它。

简单无意义的别名

select * from
  (select emp_name + ' ' + surname as employee from ca_contact) [ ]

公用表表达式,同时命名列

;WITH [ ](employee) AS (
    select emp_name + ' ' + surname
    from ca_contact)
select * from [ ]

FWIW,您可以省略CTE列名并从查询中派生出来

WITH [ ] AS (
    select emp_name + ' ' + surname as employee
    from ca_contact)
select * from [ ]

注意:由于您的查询中未定义表格/别名emp.surname,因此无法确定如何emp

答案 3 :(得分:0)

请尝试以下查询

select employee from (select emp_name + ' ' + emp.surname as employee from ca_contact) as test