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

Вниз

обработка UNION в SELECT   Найти похожие ветки 

 
Desdechado ©   (2004-05-13 18:24) [0]

Обнаружил, что в IB при использовании в SELECT этот UNION сортирует результат выборки (видимо, для поиска и удаления дубликатов), тогда как при UNION ALL все идет в том порядке, который задан объединяемыми SELECT"ами.
Вопросы:
1. можно ли как-то отучить сортировать, а то для меня важен порядок выборки, но я не могу его явно задать сортировкой по полям, а могу только порядком SELECT"ов ?
2. как обстоит ситуация в других серверах - Oracle, DB2, MS - они тоже сортируют при UNION ?


 
Соловьев ©   (2004-05-13 18:34) [1]

Может ХП сделать? и сортировать уже
select *
from sp
order by 1


 
Johnmen ©   (2004-05-13 18:34) [2]

1. Стандартно. Добавляешь в селект константное поле. Напр.:
SELECT 0, ...
UNION
SELECT 1, ...
UNION
SELECT 2, ...
UNION
...


 
Petr V. Abramov ©   (2004-05-13 18:35) [3]

В Oracle то же самое, по тем же причинам. А чем union all не устраивает?


 
Desdechado ©   (2004-05-13 18:37) [4]

2 Johnmen
точно, торможу к концу дня :)
спасибо.


 
Desdechado ©   (2004-05-13 18:42) [5]

[3] таки не нужны дубликаты


 
Petr V. Abramov ©   (2004-05-13 19:05) [6]

> таки не нужны дубликаты
> отучить сортировать
 И рыбку съесть, и ...
Лучше все же покумекать, чтоб дубликаты не возникали - сортировка - дело недешевое.
Если, конечно, не по фигу :)


 
kaif ©   (2004-05-13 19:18) [7]

А что подразумевается под порядком, который задан объединяемыми SELECT-ами ?
Может я ошибаюсь, но order by нельзя включать в эти select-ы до оператора union. По крайней мере в IB это так. А порядок, возвращаемый select-ом без этого ORDER BY может быть лишь случайно тем, что нравится. В общем случае он может оказаться каким угодно... Так что мне видится в этой постановке какое-то логическое противоречие.


 
Desdechado ©   (2004-05-13 19:29) [8]

1. дубликаты в таблицах разных SELECT"ов есть, так надо
2. порядок определяется тем, из каких таблиц берется
например, если есть в таблице А, то оно должно быть в начале
если нет в А, но есть в Б, то тоже в начале
если есть и в А, и в Б, то надо взять только из А (если одинаково), или сначала из А, потом из Б (если разное)
одинаковость определяется отбираемыми полями, наличие определяется условием WHERE, которое для разных таблиц разное

немного сложно написал, но так есть


 
Desdechado ©   (2004-05-13 19:34) [9]

еще долго плевался, когда обнаружил, что в IB для SELECT Max( первичный_ключ_INTEGER ) не используется индекс для поиска.
как с этим в других СУБД?


 
kaif ©   (2004-05-13 19:52) [10]

Ну тогда ответ
 Johnmen ©   (13.05.04 18:34) [2] - самый правильный.

еще долго плевался, когда обнаружил, что в IB для SELECT Max( первичный_ключ_INTEGER ) не используется индекс для поиска.

Я только что проверил на Yaffil. Да, это так. В плане NATURAL.


 
asp ©   (2004-05-14 17:23) [11]

Desdechado ©   (13.05.04 18:24) > DB2 UNION сортирует так же. При UNION ALL ведет совершенно иначе. Т.е.
SELECT T1.ID
FROM T1
UNION ALL
SELECT T2.ID
FROM T2
Сначала вернет T2, потом T1.
SELECT MAX(<primary-key>) - индекс используется.


 
Desdechado ©   (2004-05-14 21:00) [12]

спасибо.
а как в Oracle?


 
Petr V. Abramov ©   (2004-05-14 22:04) [13]

> а как в Oracle?
 index full scan



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

Форум: "Базы";
Текущий архив: 2004.06.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.05 c
1-1085557936
Vlad Oshin
2004-05-26 11:52
2004.06.06
Узнать код завершения программы (dos)


14-1084815408
/1
2004-05-17 21:36
2004.06.06
Интернет


3-1084440830
Вопрошающий
2004-05-13 13:33
2004.06.06
Приведение типов


14-1084863291
kull
2004-05-18 10:54
2004.06.06
Сравнительная характеристика систем контроля версий...


1-1085248628
Vetalich
2004-05-22 21:57
2004.06.06
Убирание кнопки на главном окне.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский