![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
обработка UNION в SELECT [D7, любой SQL]
Desdechado © (2004-05-13 18:24:00)Обнаружил, что в IB при использовании в SELECT этот UNION сортирует результат выборки (видимо, для поиска и удаления дубликатов), тогда как при UNION ALL все идет в том порядке, который задан объединяемыми SELECT'ами.
Вопросы:
1. можно ли как-то отучить сортировать, а то для меня важен порядок выборки, но я не могу его явно задать сортировкой по полям, а могу только порядком SELECT'ов ?
2. как обстоит ситуация в других серверах - Oracle, DB2, MS - они тоже сортируют при UNION ?
Petr V. Abramov (2004-05-14 22:04:00) [1]> а как в Oracle?
index full scan
Desdechado (2004-05-14 21:00:00) [2]спасибо.
а как в Oracle?
asp (2004-05-14 17:23:00) [3]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>) - индекс используется.
kaif (2004-05-13 19:52:00) [4]Ну тогда ответ
Johnmen © (13.05.04 18:34) [2] - самый правильный.
еще долго плевался, когда обнаружил, что в IB для SELECT Max( первичный_ключ_INTEGER ) не используется индекс для поиска.
Я только что проверил на Yaffil. Да, это так. В плане NATURAL.
Desdechado (2004-05-13 19:34:00) [5]еще долго плевался, когда обнаружил, что в IB для SELECT Max( первичный_ключ_INTEGER ) не используется индекс для поиска.
как с этим в других СУБД?
Desdechado (2004-05-13 19:29:00) [6]1. дубликаты в таблицах разных SELECT'ов есть, так надо
2. порядок определяется тем, из каких таблиц берется
например, если есть в таблице А, то оно должно быть в начале
если нет в А, но есть в Б, то тоже в начале
если есть и в А, и в Б, то надо взять только из А (если одинаково), или сначала из А, потом из Б (если разное)
одинаковость определяется отбираемыми полями, наличие определяется условием WHERE, которое для разных таблиц разное
немного сложно написал, но так есть
kaif (2004-05-13 19:18:00) [7]А что подразумевается под порядком, который задан объединяемыми SELECT-ами?
Может я ошибаюсь, но order by нельзя включать в эти select-ы до оператора union. По крайней мере в IB это так. А порядок, возвращаемый select-ом без этого ORDER BY может быть лишь случайно тем, что нравится. В общем случае он может оказаться каким угодно... Так что мне видится в этой постановке какое-то логическое противоречие.
Petr V. Abramov (2004-05-13 19:05:00) [8]> таки не нужны дубликаты
> отучить сортировать
И рыбку съесть, и ...
Лучше все же покумекать, чтоб дубликаты не возникали - сортировка - дело недешевое.
Если, конечно, не по фигу :)
Desdechado (2004-05-13 18:42:00) [9][3] таки не нужны дубликаты
Desdechado (2004-05-13 18:37:00) [10]2 Johnmen
точно, торможу к концу дня :)
спасибо.
Petr V. Abramov (2004-05-13 18:35:00) [11]В Oracle то же самое, по тем же причинам. А чем union all не устраивает?
Соловьев (2004-05-13 18:34:00) [12]Может ХП сделать? и сортировать уже
select *
from sp
order by 1
Johnmen (2004-05-13 18:34:00) [13]1. Стандартно. Добавляешь в селект константное поле. Напр.:
SELECT 0, ...
UNION
SELECT 1, ...
UNION
SELECT 2, ...
UNION
...