Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.02;
Скачать: CL | DM;

Вниз

order by и индексы в union запросе   Найти похожие ветки 

 
jack128 ©   (2003-09-11 13:30) [0]

День добрый.
Вот есть такой запрос:

select ID, DESCRIPTION, 0 as ITEM_TYPE from HCNT1_DEVICE_GROUPS union
select ID, DESCRIPTION, 1 as ITEM_TYPE from HCNT1_DEVICES
order by 3,1
Нужно получить сначало все записи таблицы HCNT1_DEVICE_GROUPS, отсортировонные по полю ID, а потом все записи из HCNT1_DEVICES, отсортировонные тоже по ID. Только при таком подходе не используются индексы(ID в обоих таблицах - PK). Можно ли переделать запрос так, что использовались индексы???


 
Alexandr ©   (2003-09-11 13:38) [1]

а как ты тут умудришся использовать индекс?
Да еще и union, который значительно сложнее union all


 
Vlad ©   (2003-09-11 13:45) [2]

Краем уха слышал, что в IB можно делать SELECT из ф-ции, возвращающей курсор.
Попробуй сделать юнион двух селектов из функций. Должно сработать, причем с индексами.


 
Sandman25 ©   (2003-09-11 13:45) [3]

Кстати, нужно написать Union all - там все равно повторяющихся данных нет.
И еще: зачем использовать индексы - ведь возвращаются все данные из обеих таблиц...


 
jack128 ©   (2003-09-11 13:46) [4]


> Да еще и union, который значительно сложнее union all

гм. Имелось ввиду union all, sorry

> а как ты тут умудришся использовать индекс

По лаймерски ;-) Сначало отсортитровать HCNT1_DEVICE_GROUPS, а потом HCNT1_DEVICES.
(select ID, DESCRIPTION, 0 as ITEM_TYPE from HCNT1_DEVICE_GROUPS
order by 1)
union
(select ID, DESCRIPTION, 1 as ITEM_TYPE from HCNT1_DEVICES
order by 1), но к сожлению так нельзя... А вообще если б я знал, то не спрашивал наверное ;-)


 
jack128 ©   (2003-09-11 13:47) [5]


> зачем использовать индексы - ведь возвращаются все данные
> из обеих таблиц...

Для сортировки

> Vlad © (11.09.03 13:45) [2]
> Краем уха слышал, что в IB можно делать SELECT из ф-ции,
> возвращающей курсор.
> Попробуй сделать юнион двух селектов из функций. Должно
> сработать, причем с индексами.

Сейчас попробуем, спасибо


 
Alexandr ©   (2003-09-11 13:54) [6]

ты эта...
сначала подумай как тебе надо, сначала сортировать, а потом состыковывать.
или сначала состыковать, а потом результат отсортировать...

в первом случае можно индекс использовать, а во втором принципиально невозможно.


 
jack128 ©   (2003-09-11 14:01) [7]

Вроде в первом посте написал

> Нужно получить сначало все записи таблицы HCNT1_DEVICE_GROUPS,
> отсортировонные по полю ID, а потом все записи из HCNT1_DEVICES,
> отсортировонные тоже по ID
..

> Vlad © (11.09.03 13:45) [2]
Все работет, спасибо.
Хотя все таки интересно почему запрещены такие запросы как в
> jack128 © (11.09.03 13:46) [4]


 
Vlad ©   (2003-09-11 14:36) [8]

>jack128 © (11.09.03 14:01) [7]
то что ты написал в [4], даже еслиб можно было так делать, то практически никакого смысла бы не имело. Представь, ты получаешь два набора данных, каждый из которых отсортирован по полю ID.
Затем складываешь их и получаешь полную чушь. Т.к. результирующий набор уже не будет отсортирован по ID.


 
Alexandr ©   (2003-09-11 14:38) [9]

а ну тады процедура тебе поможет...
begin
for select ...order by ... do suspend
for select ...order by ... do suspend
end



Страницы: 1 вся ветка

Текущий архив: 2003.10.02;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.017 c
3-3708
vidiv
2003-08-28 14:01
2003.10.02
Если ли компонент для работы с MySql?


14-4077
Layner
2003-09-15 10:52
2003.10.02
Посоветуйте карту(можно вирт.) для оплаты в инете. По миним.


14-4113
panov
2003-09-13 13:46
2003.10.02
Еще без слов-)


1-3826
KSergey
2003-09-19 13:31
2003.10.02
Форма: minimaze/maximaze


3-3719
AlexWeb
2003-09-13 15:33
2003.10.02
Вопрос по UPPER...