Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.10.02;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.01 c
3-3775
varra
2003-09-11 15:21
2003.10.02
MS Access 97 + BDE + password


14-4062
Devil
2003-09-14 22:30
2003.10.02
у кого есть Корсары 2 - ПОМОГИТЕ


14-4116
Triny
2003-09-12 17:40
2003.10.02
Исходники программ


1-3888
Элл
2003-09-18 15:18
2003.10.02
Контекстное меню windows


7-4139
pod
2003-07-18 07:46
2003.10.02
Клавиатура





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский