-
Александр Т © (21.02.11 10:24) [0]___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 с лишним.
Оно вроде понятно, первая работает по в меру индексированным полям, а вторая с хаотичным набором данных.
Но возможно ли как-то покрасивше ? :) -
clickmaker © (21.02.11 11:12) [1]> обе выборки объединить
а в FB union нету? -
Александр Т © (21.02.11 12:57) [2]
> а в FB union нету?
Ну как же нету :)
И даже order by для результирующего набора дозволяет...
А вот group by - фиг. Впрочем, если ошибаюсь, буду только рад :) -
> А вот group by - фиг. Впрочем, если ошибаюсь, буду только рад :)
ошибаешься, не работал с FB но в еще IB 6.5 группировка была. рад? -
Александр Т © (21.02.11 13:16) [4]
> еще IB 6.5 группировка была. рад?
Еще нет...
select Pole1 from Table1
union
select Pole_тоже_1 from Table2
group by Pole1
Так, что ли?
Я ж не про group by вообще, а применительно к union-у -
> [0] Александр Т © (21.02.11 10:24)
Сделай вьюху с union-ом, а по ней уже group by.
> Две таблицы с идентичными полями.
99% что недоработка в проектировании БД. -
> Так, что ли?
> Я ж не про group by вообще, а применительно к union-у
примерно...group by 1
попробуй, или 0 смотря с чего там нумерация. -
Александр Т © (21.02.11 14:46) [7]
примерно...
group by 1
да она по-любому будет только второй select группировать -
Александр Т © (21.02.11 14:54) [8]
> Сделай вьюху с union-ом
В select-е всякий раз условия where разные.
Разве что во вьюхе обе таблицы вместе слить, а уже по общей каше делать отбор и группировку...
Н-да, однако 99% что недоработка в проектировании БД. -
подзапросов тоже нет? -SELECT Pole1, Count(*) AS Cnt FROM (
SELECT Pole1 FROM Table1
UNION ALL
SELECT Pole2 FROM Table2
)
GROUP BY Pole1
(могут быть вариации в синтаксисе) -
> [8] Александр Т © (21.02.11 14:54)
> Разве что во вьюхе обе таблицы вместе слить, а уже по общей каше делать отбор и группировку...
Именно. Только Union All не забудь.
> [9] sniknik © (21.02.11 16:50)
Не умеет ФБ1.5 делать select from select -
Игорь Шевченко © (21.02.11 18:34) [11]
> Не умеет ФБ1.5 делать select from select
зато умеет view -
Александр Т © (22.02.11 04:02) [12]>to all
Спасибо :).