У меня есть две таблицы с идентичной схемой в 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
Buggieboy 26 Авг 2011 в 22:10

2 ответа

Лучший ответ

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

select Name, Rank, SerNo, OtherStuff from 
(
select Name, Rank, SerNo, OtherStuff from OldPlayers
union 
select Name, Rank, SerNo, OtherStuff from NewPlayers
) as Players
4
CristiC 26 Авг 2011 в 18:42

У меня нет под рукой копии 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

Должно сработать.

1
Andriy M 27 Авг 2011 в 00:44