使用别名来引用子查询中的联合获得的结果集

时间:2010-11-23 18:16:30

标签: sql sql-server-2005 subquery alias

我遇到了这个查询的麻烦,似乎无法在网上找到解决方案。我要做的是在对它们应用联合后从几个表中选择行,然后只将那些行插入到table1中,其中col2和col3(作为一对)在table1中不存在。

INSERT INTO [somedbo].[table1](col1, col2, col3, col4) 
    SELECT temptbl.MAX(col1), temptbl.col2, temptbl.col3, (temptbl.col2+' '+temptbl.col3)
      FROM    (
               .
               .
             //sub query with unions. which is working fine.
               .
               .
              ) AS temptbl
      WHERE  not exists(select 1 from temptbl as t where t.col2=table1.col2 AND t.col3=table1.col3)
      GROUP  BY col2, col3
      ORDER  BY col2, col3 ASC

我正在使用SQL Server 2005,我收到错误:消息208,级别16,状态1,行1 无效的对象名称't​​emptbl'。

先谢谢你帮助我。

2 个答案:

答案 0 :(得分:2)

您无法在temptbl子句子查询中引用已命名的子查询WHERE

Use table variable instead:

DECLARE @tmptable TABLE (<table definition>)

INSERT INTO @tmptable
SELECT...
<UNION QUERY>

然后像现在一样在查询中使用@tmptable。

答案 1 :(得分:1)

使用WITH子句创建公用表表达式。 http://msdn.microsoft.com/en-us/library/ms175972.aspx