использование псевдонима для ссылки на набор результатов, полученный объединениями в подзапросе - PullRequest
0 голосов
/ 23 ноября 2010

У меня проблемы с этим запросом, и я не могу найти решение в сети. Я пытаюсь выбрать строки из нескольких таблиц после применения к ним объединений, а затем вставить только те строки в 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 Неверное имя объекта 'temptbl'.

Заранее спасибо за помощь.

Ответы [ 2 ]

2 голосов
/ 23 ноября 2010

Вы не можете ссылаться на ваш именованный подзапрос temptbl в вашем подзапросе предложения WHERE.

Вместо этого используйте табличную переменную:

DECLARE @tmptable TABLE (<table definition>)

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

Затем используйте@tmptable в вашем запросе, как вы сейчас.

1 голос
/ 23 ноября 2010

Используйте предложение WITH для создания общего табличного выражения.http://msdn.microsoft.com/en-us/library/ms175972.aspx

...