2016-09-22 48 views
1

在MS SQL Server 2008和更新,它可以指定使用values的子查询“文字”表:如何在CTE中简洁地指定“文字”表格?

select * from (
    values (1,2), 
     (3,4) 
) as foo(bar,baz) 

不过,我还没有想出一个合理的方式在with子句指定此(CTE)。

我希望下面会的工作,因为它工作在不断程序员友好的PostgreSQL就好了... ...但它给了与SQL Server中的语法错误:

with foo(bar,baz) as (
    values (1,2), 
     (3,4) 
) 
select * from foo; 

这个另一种形式确实工作但似乎过于冗余,而且容易出错:

with foo as (
    select * from (
    values (1,2), 
     (3,4) 
) as foo(bar, baz) 
) 
select * from foo; 

是否有一个CTE指定文字表更简洁的方式,在SQL服务器?

+1

不,在CTE中没有不错的方法。那个不必要的SELECT让我烦恼! –

+1

这几乎是所有RDBMS中的标准。似乎人们总是希望在SQL中更简洁,但它是一种非常冗长的语言,通常情况下,更明确的是会产生更好的结果。 – JNevill

+0

够正确。我想我被PostgreSQL所迷惑,它实际上试图让这样的事情变得容易。 : -/ –

回答

1
with foo as (select 1 as bar, 2 as baz 
      union all 
      select 3, 4) 
select * from foo; 
+0

这是Oracle的做法,我不会描述它作为“更简洁”:( –

+1

“Oracle”的方式将需要“选择1作为酒吧,2作为baz从双” –

+1

这是真的,Oracle甚至*少*简洁:-P –

相关问题