Что означает эта ООН? - PullRequest
       1

Что означает эта ООН?

2 голосов
/ 08 сентября 2010

Я хотел сделать вставку в объединение, и кто-то предложил это:

SELECT x INTO ##temp
FROM (SELECT x FROM y UNION ALL SELECT x FROM z) UN

Работает, а что за UN? К сожалению, поиск в Google для t-sql un не очень полезен: p

Примечание: я узнал, что вы можете просто сделать SELECT x INTO ##temp FROM y UNION ALL SELECT x FROM b, но мне все еще интересно узнать UN.

РЕДАКТИРОВАТЬ: Хорошо, так что это псевдоним, но почему это необходимо для работы? Если я удалю его, он не будет выполнен.

Ответы [ 6 ]

10 голосов
/ 08 сентября 2010

Это не ключевое слово.Это псевдоним.Вместо «UN» можно было использовать любую строку.

В более полной форме это:

SELECT x INTO ##temp
FROM (SELECT x FROM y UNION ALL SELECT x FROM z) AS UN

@ Tomalak является правильным.В этом случае псевдоним обязателен.Без псевдонима ошибка:

Сообщение 102, уровень 15, состояние 1, строка 2 Неверный синтаксис рядом с ')'.

Я немного упростил запроси использовал базу данных AdventureWorks:

SELECT * INTO ##temp
FROM (SELECT * FROM Person.Address) 

, здесь появляется ошибка, указанная выше.Для сравнения:

SELECT * INTO ##temp
FROM Person.Address

работает просто отлично.Альтернатива

;WITH UN AS
(
    SELECT * FROM Person.Address
)
SELECT * INTO ##temp
FROM UN
4 голосов
/ 08 сентября 2010

Требуется, потому что это производная таблица и производные таблицы должны иметь имя. Разве это не сработает? Я не вижу, что вам нужна производная таблица.

SELECT x 
INTO #Temp
FROM y 
UNION ALL 
SELECT x 
FROM z

Я перешел на обычную временную таблицу, поскольку глобальные таблицы, как правило, плохая идея, так как другие соединения могут повлиять на них. Если он вам действительно нужен, используйте его, иначе будьте очень осторожны с использованием временных таблиц gloabl.

3 голосов
/ 08 сентября 2010

Это alias в этом контексте.Нет команды un T-SQL.Затем вы можете ссылаться на свои поля с этим.

SELECT un.x INTO ##temp
FROM (SELECT x FROM y UNION ALL SELECT x FROM z) UN
1 голос
/ 08 сентября 2010

Все, что делает, это псевдоним (ВЫБРАТЬ x ОТ y СОЮЗА ВСЕ ВЫБРАТЬ x ОТ z) на "UN"

1 голос
/ 08 сентября 2010

В этом случае UN - псевдоним для результирующего набора подзапроса ((SELECT x FROM y UNION ALL SELECT x FROM z)). Вы можете заменить UN на что угодно, если это не запутает анализатор.

0 голосов
/ 08 сентября 2010

Псевдоним / имя корреляции дает результирующему набору временное имя, чтобы на него можно было ссылаться в другом месте запроса.Этот пример показывает, что псевдоним необходим для того, чтобы иметь возможность ссылаться на поля в подзапросах в предложениях select и join.Если подзапросы не имеют псевдонимов, сервер не будет знать, из какой таблицы получить поле 'y'.Псевдонимы необходимы для различения двух разных ролей подзапросов.

select A.*, B.y
from 
(select id, f, k, y from Table1) A
join
(select id, t, y, s from Table2) B
on A.id = B.id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...