Невозможно заменить запрос SQL UNION на имя таблицы - PullRequest
2 голосов
/ 26 августа 2011

У меня есть две таблицы с одинаковой схемой в SQL Server 2008 R2.Если я выполню следующий запрос с неповрежденными скобками, я получу результаты из обеих таблиц.

/*
select distinct Name, Rank, SerNo, OtherStuff from 
*/

(
select Name, Rank, SerNo, OtherStuff from OldPlayers

union 
select Name, Rank, SerNo, OtherStuff from NewPlayers
)

/*
OldPlayers
*/

go

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

Если я сейчас перекомментирую имя таблицы в конце и раскомментирую выражение в скобках, чтобы оно могло заменить имя таблицы, я получаю ошибку «Неверный синтаксис рядом с ')»."

Почему я не могу заменить выражение объединения на имя таблицы?

Ответы [ 2 ]

4 голосов
/ 26 августа 2011

Если вы попробуете это так:

select Name, Rank, SerNo, OtherStuff from 
(
select Name, Rank, SerNo, OtherStuff from OldPlayers
union 
select Name, Rank, SerNo, OtherStuff from NewPlayers
) as Players
1 голос
/ 26 августа 2011

У меня нет удобной копии SQL Server, но это не всегда так, когда вы используете выражение для таблицы в качестве части запроса - синтаксис требует, чтобы вы назвали полученную таблицу (если это не самая внешняя часть запроса, так что имя таблицы будет ссылаться на саму таблицу)? Так что если бы вместо запроса объединения вы использовали «Выбрать 1» (я считаю, что это законно), вам все равно пришлось бы назвать получившуюся «таблицу».

Итак,

select distinct Name, Rank, SerNo, OtherStuff from 
(
select Name, Rank, SerNo, OtherStuff from OldPlayers
union 
select Name, Rank, SerNo, OtherStuff from NewPlayers
) SYNTAXREQUIRESTABLENAME

должно работать.

...