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

Вниз

Не работает ORDER BY   Найти похожие ветки 

 
oleg_p   (2005-09-12 08:31) [0]

При выполнении запроса

SELECT
 PROPERTY.ID_ABS,
 PROP_DSC.NAME,
 PROP_DSC.CODE,
 PROP_DSC.VALUE_TYPE,
 PROP_DSC.POINTER_TYPE,
 PROP_DSC.LIST,
 PROPERTY.PROP_DATA,
 PROP_DATA_F.DATA AS DATA_F,
 PROP_DATA_I.DATA AS DATA_I,
 PROP_DATA_S.DATA AS DATA_S
FROM
 PROP_DSC,
 PROPERTY

LEFT OUTER JOIN PROP_DATA_F ON PROP_DATA_F.ID=PROPERTY.PROP_DATA
LEFT OUTER JOIN PROP_DATA_I ON PROP_DATA_I.ID=PROPERTY.PROP_DATA
LEFT OUTER JOIN PROP_DATA_S ON PROP_DATA_S.ID=PROPERTY.PROP_DATA

WHERE
 PROP_DSC.ID=PROPERTY.PROP_DSC AND
 PROPERTY.ID_OBJ=:ID_OBJ AND
 PROP_DSC.IS_GROUP="F" AND
 PROP_DSC.PARENT=:PARENT

ORDER BY PROP_DSC.ORD


таблица оказывается отсортированной не по PROP_DSC.ORD,
а по первичному индексу таблицы PROP_DSC. Если убрать все OUTER JOIN - сортировка идет нормально.


 
ANB ©   (2005-09-12 09:15) [1]

Не могет такого быть. Значит order by отвалился при формировании запроса. Чем выполняешь ?


 
Savek   (2005-09-12 09:16) [2]

Попробуй вставить PROP_DSC.ORD в список полей Select


 
oleg_p   (2005-09-12 09:39) [3]

> Не могет такого быть. Значит order by отвалился при формировании запроса. Чем выполняешь ?

В IBDataSet.SelectSQL. Также пробовал в IBExpert - результат тот же.

> Попробуй вставить PROP_DSC.ORD в список полей Select
Уже пробовал - не помогает.


 
Sergey13 ©   (2005-09-12 09:44) [4]

А если попробовать Жар птицу?


 
oleg_p   (2005-09-12 09:57) [5]

>А если попробовать Жар птицу?

Так на ней и работаю - Firebird 1.0.2. Надо конечно попробовать чё-нидь ещё ... попробую ib 6.0 поставить.


 
ANB ©   (2005-09-12 10:02) [6]


> oleg_p   (12.09.05 09:57) [5]
- значит либо версия кривая, либо стоит криво. Стандарт SQL обязывает твою конструкцию работать.


 
Sergey13 ©   (2005-09-12 10:12) [7]

2 [5] oleg_p   (12.09.05 09:57)
>Так на ней и работаю - Firebird 1.0.2.
Тогда попробуй поставить помоложе.


 
oleg_p   (2005-09-12 10:38) [8]

Поставил IB 6.5 на другой машине, переписал туда базу. Попробовал тот же запрос сначала в IBExpert удаленно через сеть, потом в IBConsole локально. Абсолютно тот же результат.

Сортировка идет либо по полю PROPERTY.ID_ABS либо по полю PROP_DSC.ID - они оба по сортировке дают один результат,поэтому точно не скажу. Оба поля в PRRIMARY KEY.

Может план запроса натолкнет на мысль:

PLAN MERGE (
 SORT (PROP_DSC ORDER PROP_DSC_IDX1),
 SORT (JOIN (JOIN (JOIN (PROPERTY NATURAL,PROP_DATA_F INDEX
 (RDB$PRIMARY38)),PROP_DATA_I INDEX
 (RDB$PRIMARY43)),PROP_DATA_S INDEX (RDB$PRIMARY45))))


 
Stakan ©   (2005-09-12 10:46) [9]

Когда-то сталкивался с такой ошибкой. Помогло создание индекса по полю в order by


 
oleg_p   (2005-09-12 10:46) [10]

... PROP_DSC_IDX1 - это индекс на поле PROP_DSC.ORD


 
Prohodil Mimo ©   (2005-09-12 10:54) [11]

A jesli v kachestve imjon polej ne ispol"zovat" zarezervirovannije slova?


 
oleg_p   (2005-09-12 11:03) [12]

> Prohodil Mimo ©   (12.09.05 10:54) [11]
Так их там вроде и нет ???


 
oleg_p   (2005-09-12 11:20) [13]

Удалил индекс по полю PROP_DSC.ORD - ВСЕ ЗАРАБОТАЛО !!
Создаю индекс заново - опять не сортирует.
Придется пожить без индекса :-(


 
Desdechado ©   (2005-09-12 11:45) [14]

вообще-то сортировка по полю, отсутствующему в SELECT, - очень дурной тон
большинство серверов обрабатывают это по-своему, если вообще обрабатывают


 
Fay ©   (2005-09-12 12:41) [15]

2 Desdechado ©   (12.09.05 11:45) [14]
>> сортировка по полю, отсутствующему в SELECT, - очень дурной тон

Бред


 
Desdechado ©   (2005-09-12 13:12) [16]

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


 
Fay ©   (2005-09-12 16:07) [17]

2 Desdechado ©   (12.09.05 13:12) [16]
Представь себе, что мне интересно в каком порядке происходили некие события, но совершенно наплевать когда именно.


 
Deniz ©   (2005-09-13 07:33) [18]

+ дополню
Дурной тон это:

...
FROM
PROP_DSC,
PROPERTY

LEFT OUTER JOIN ...

переведи объединение PROP_DSC и PROPERTY в inner join, а то как-то нехорошо получается.

...
FROM
PROP_DSC
INNER JOIN PROPERTY ON PROP_DSC.ID=PROPERTY.PROP_DSC

LEFT OUTER JOIN PROP_DATA_F ON PROP_DATA_F.ID=PROPERTY.PROP_DATA
LEFT OUTER JOIN PROP_DATA_I ON PROP_DATA_I.ID=PROPERTY.PROP_DATA
LEFT OUTER JOIN PROP_DATA_S ON PROP_DATA_S.ID=PROPERTY.PROP_DATA
...


 
oleg_p   (2005-09-13 08:01) [19]

Во-первых, спасибо всем за помощь.

> Desdechado ©   (12.09.05 13:12) [16]
Поле ORD сделано специально для сортировки,чтобы иметь возможность поменять местами две соседние записи просто обменявшись значениями ORD (Fay [17] верно сказал). При этом знать, что в нём содержится пользователю не надо вообще.

> Deniz ©   (13.09.05 07:33) [18]
> переведи объединение PROP_DSC и PROPERTY в inner join, а то как-то нехорошо получается.

Нехорошо, в смысле код некрасивый? Или есть более объективные причины?


 
Desdechado ©   (2005-09-13 11:43) [20]

Deniz ©   (13.09.05 07:33) [18]
А вот использование OUTER JOIN - вполне нормальное явление. Для того оно и придумано в языке, чтоб даже отсутствующие в другой таблице данные использовать, что INNER JOIN не позволяет.


 
Deniz ©   (2005-09-14 06:25) [21]

>Desdechado ©   (13.09.05 11:43) [20]
Спасибо, конечно, за консультацию, но все это я давно знаю.
Про OUTER JOIN я ничего не говорил.
Ты меня как-то не так понял. Я имел ввиду что, в одном select"е использовать явные и неявные объединения таблиц не есть гуд и привел пример как это должно выглядеть с inner join.

>oleg_p   (13.09.05 08:01) [19]
>Нехорошо, в смысле код некрасивый? Или есть более объективные причины?

Во-первых: есть вероятность, что в последствии ты забудешь прописать в where условие объединения, и результат окажется неверный.
Во-вторых: такой подход усложняет жизнь оптимизатору.
И в-последних: если память не изменяет, то в FireBird 2, такой код будет выдавать предупреждение или ошибку.


 
Fay ©   (2005-09-14 06:45) [22]

2 Deniz ©   (14.09.05 6:25) [21]
Не понимаю, как можно испортить жизнь оптимизатору, который годами путает left join и inner join.



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

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

Наверх





Память: 0.49 MB
Время: 0.086 c
3-1126454256
VladBD
2005-09-11 19:57
2005.10.23
Нумерация записей с учетом сортировки


14-1127820439
VictorT
2005-09-27 15:27
2005.10.23
Подкиньте плиз ссылок на описание Pagemaker tagged text


1-1127921676
Still Swamp
2005-09-28 19:34
2005.10.23
CreateOleObject - как создать два объекта?


6-1120217673
banzay_man
2005-07-01 15:34
2005.10.23
показ копьютеров


2-1127749588
erika
2005-09-26 19:46
2005.10.23
fb





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