Соединить результаты запроса, не используя UNION
У меня есть запрос:
SELECT TOP (20)
ValueTable.Id id,
ValueTable.RecordTime recordtime,
NamesTable.FullName fullname
FROM
DB.ValueTable ValueTable
JOIN
(
SELECT ID, FullName
FROM FullNamesTable1
UNION ALL
SELECT ID, FullName
FROM FullNamesTable2
) NamesTable
ON ValueTable.ID = NamesTable.ID
WHERE
id > 8000
ORDER BY recordtime DESC
Проблема в том, что тот sql, который используется на сервере, очень старый/странный, и он не умеет использовать UNION внутри подзапроса.
То есть, запрос
SELECT ID, FullName
FROM FullNamesTable1
UNION ALL
SELECT ID, FullName
FROM FullNamesTable2
вполне рабочий, и выдаст значения, но внутри оператора FROM он уже не умеет понимать данный оператор. Как можно конкатинировать две одинаковые таблицы иным способом? WITH и #TempTable не помогут по той же причине отсталости sql.
UPDATE:
Запрос без UNION тоже полностью рабочий:
SELECT TOP (20)
ValueTable.Id id,
ValueTable.RecordTime recordtime,
NamesTable.FullName fullname
FROM
DB.ValueTable ValueTable
JOIN
(
SELECT ID, FullName
FROM FullNamesTable1
) NamesTable
ON ValueTable.ID = NamesTable.ID
WHERE
id > 8000
ORDER BY recordtime DESC
Версию sql я не могу узнать, знаю лишь то, что это сервер со SCADA. В других подобных запросах проблема решалась таким образом, что все UNION выносились наверх, но, мне кажется, это не самое правильное решение:
(
SELECT TOP (20)
ValueTable.Id id,
ValueTable.RecordTime recordtime,
NamesTable.FullName fullname
FROM
DB.ValueTable ValueTable
JOIN
FullNamesTable1 NamesTable
ON ValueTable.ID = NamesTable.ID
WHERE
id > 8000
ORDER BY recordtime DESC
) UNION All (
SELECT TOP (20)
ValueTable.Id id,
ValueTable.RecordTime recordtime,
NamesTable.FullName fullname
FROM
DB.ValueTable ValueTable
JOIN
FullNamesTable2 NamesTable
ON ValueTable.ID = NamesTable.ID
WHERE
id > 8000
ORDER BY recordtime DESC
)