Ответ 1
SELECT C1, C2, C3
FROM (
select C1, C2, C3 from T1
union all
select C1, C2, C3 from T2
)
order by C3
Это моя первая попытка ответить на мой собственный вопрос, так как кто-то может справиться с этим, и поэтому он может помочь. Используя Firebird, я хочу объединить результаты двух запросов с помощью UNION ALL, а затем отсортировать полученный результат в данном столбце. Что-то вроде:
(select C1, C2, C3 from T1)
union all
(select C1, C2, C3 from T2)
order by C3
Скобки состоят из правильного синтаксиса для других баз данных и необходимы, чтобы убедиться, что аргументы для UNION ALL (операция, определенная для работы с таблицами - т.е. неупорядоченный набор записей) Попробуйте заказать индивидуально. Однако я не мог заставить этот синтаксис работать в Firebird - как это можно сделать?
SELECT C1, C2, C3
FROM (
select C1, C2, C3 from T1
union all
select C1, C2, C3 from T2
)
order by C3
Имена полей не должны быть равны. Вот почему вы не можете использовать имя поля в порядке. Вместо этого вы можете использовать индекс поля. Как в:
(select C1, C2, C3 from T1)
union all
(select C7, C8, C9 from T2)
order by 3
Как насчет:
select C1, C2, C3 from T1
union all
select C1, C2, C3 from T2
order by 2
По крайней мере, в новых версиях Firebird он работает, если вы заказываете "Число" вместо использования псевдонима.
В Firebird 1.5 это работает для меня
create view V1 (C1, C2, C3) as
select C1, C2, C3 from T1
union all
select C1, C2, C3 from T2
а затем
select C1, C2, C3 from V1 order by C3
Выполните UNION ALL в представлении (без предложения ORDER BY), затем выберите из представления с помощью ORDER BY.
Перемещение order by
в хвост запроса имеет эффект нет для вывода datagrid.
select * from (
select first 1
C1
from T1
order by id desc
)
union all
select * from (
select first 1
C1
from T2
order by id desc
)