![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сгруппировать объединение... [FB 1.5]
Александр Т © (2011-02-21 10:24:00)___FB 1.5.5___
Две таблицы с идентичными полями. В обеих нужно сделать выборки, обе выборки объединить и сгруппировать по каким-то полям.
Решил двумя процедурами, причем вторая вызывает первую:
create procedure Proc1 returns (<набор полей>)
begin
for select <набор полей> from Таблица 1
where "Условия 1"
into <:набор полей>
do
Suspend;
for select <набор полей> from Таблица 2
where "Условия 2"
into <:набор полей>
do
Suspend;
end
create procedure Proc2 returns (<набор полей>)
begin
for select <набор полей> from Proc1
into <:набор полей>
GROUP BY "Поля группировки"
do
Suspend;
end
В общем-то работает...
Одно не нравится: как-то громоздко и если первая процедура выполняется, например за 16 мс, то вторая - за 400 с лишним.
Оно вроде понятно, первая работает по в меру индексированным полям, а вторая с хаотичным набором данных.
Но возможно ли как-то покрасивше ? :)
Александр Т (2011-02-22 04:02:00) [1]>to all
Спасибо :).
Игорь Шевченко (2011-02-21 18:34:00) [2]
> Не умеет ФБ1.5 делать select from select
зато умеет view
Sergey13 (2011-02-21 17:32:00) [3]> [8] Александр Т © (21.02.11 14:54)
> Разве что во вьюхе обе таблицы вместе слить, а уже по общей каше делать отбор и группировку...
Именно. Только Union Allне забудь.
> [9] sniknik © (21.02.11 16:50)
Не умеет ФБ1.5 делать select from select
sniknik (2011-02-21 16:50:00) [4]подзапросов тоже нет? -
SELECT Pole1, Count(*) AS Cnt FROM (
SELECT Pole1 FROM Table1
UNION ALL
SELECT Pole2 FROM Table2
)
GROUP BY Pole1
(могут быть вариации в синтаксисе)
Александр Т (2011-02-21 14:54:00) [5]
> Сделай вьюху с union-ом
В select-е всякий раз условия where разные.
Разве что во вьюхе обе таблицы вместе слить, а уже по общей каше делать отбор и группировку...
Н-да, однако 99% что недоработка в проектировании БД.
Александр Т (2011-02-21 14:46:00) [6]
примерно...
group by 1
да она по-любому будет только второйselect группировать
sniknik (2011-02-21 14:37:00) [7]> Так, что ли?
> Я ж не про group by вообще, а применительно к union-у
примерно...
group by 1
попробуй, или 0 смотря с чего там нумерация.
Sergey13 (2011-02-21 14:11:00) [8]> [0] Александр Т © (21.02.11 10:24)
Сделай вьюху с union-ом, а по ней уже group by.
> Две таблицы с идентичными полями.
99% что недоработка в проектировании БД.
Александр Т (2011-02-21 13:16:00) [9]
> еще IB 6.5 группировка была. рад?
Еще нет...
select Pole1 from Table1
union
select Pole_тоже_1 from Table2
group by Pole1
Так, что ли?
Я ж не про group by вообще, а применительно к union-у
sniknik (2011-02-21 13:07:00) [10]> А вот group by - фиг. Впрочем, если ошибаюсь, буду только рад :)
ошибаешься, не работал с FB но в еще IB 6.5 группировка была. рад?
Александр Т (2011-02-21 12:57:00) [11]
> а в FB union нету?
Ну как же нету :)
И даже order by для результирующего набора дозволяет...
А вот group by - фиг. Впрочем, если ошибаюсь, буду только рад :)
clickmaker (2011-02-21 11:12:00) [12]> обе выборки объединить
а в FB union нету?