Проблема с UNION

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
gsAlexander
Сообщения: 12
Зарегистрирован: 07 ноя 2007, 16:28

Проблема с UNION

Сообщение gsAlexander » 03 дек 2007, 23:05

Доброго все дня!
Есть такой запрос:

Код: Выделить всё

SELECT
  f.id, CAST('Òåêóùàÿ' AS VARCHAR(7)), 99999 AS revision,
  f.script, c.name, f.editiondate
FROM
  gd_function f JOIN gd_contact c ON c.id = f.editorkey
WHERE
  f.id = :ID

UNION

SELECT
  l.id, CAST(l.revision AS VARCHAR(7)), l.revision,
  l.script, c.name, l.editiondate
FROM
  gd_function_log l JOIN gd_contact c ON c.id = l.editorkey
WHERE
  l.functionkey = :ID

ORDER BY 3 DESC
поле script в обеих таблицах Blob, revision - Integer. Запрос под YA и FB.2.0. работал верно. На FB 2.1.0.17081 выходит ошибка:
Unsuccessful execution caused by system error that does not preclude successful execution of subsequent statements.
Datatype BLOB is not supported for sorting operation.

mdfv
Сообщения: 119
Зарегистрирован: 23 май 2006, 15:53

Сообщение mdfv » 04 дек 2007, 07:29

По идее, то что оно раньше работало являлось большой вольностью, которую убрали.
Может явный cast (substring) к varchar делать ?

belov-evgenii
Сообщения: 52
Зарегистрирован: 28 сен 2007, 10:19

Сообщение belov-evgenii » 04 дек 2007, 07:55


gsAlexander
Сообщения: 12
Зарегистрирован: 07 ноя 2007, 16:28

Сообщение gsAlexander » 04 дек 2007, 09:46

mdfv писал(а):По идее, то что оно раньше работало являлось большой вольностью, которую убрали.
Может явный cast (substring) к varchar делать ?
ORDER идёт по полю Integer. Каждый запрос в отдельности работает, с UNION нет. Где здесь вольности?

mdfv
Сообщения: 119
Зарегистрирован: 23 май 2006, 15:53

Сообщение mdfv » 04 дек 2007, 09:53

ORDER идёт по полю Integer.
обсчитался :oops:

stix-s
Заслуженный разработчик
Сообщения: 557
Зарегистрирован: 13 дек 2005, 11:52

Сообщение stix-s » 04 дек 2007, 10:00

mdfv писал(а):
ORDER идёт по полю Integer.
обсчитался :oops:
дык не UNION ALL - следовательно предполагается DISTINCT, про что и написано по ссылке выше

stix-s
Заслуженный разработчик
Сообщения: 557
Зарегистрирован: 13 дек 2005, 11:52

Re: Проблема с UNION

Сообщение stix-s » 04 дек 2007, 10:25

gsAlexander писал(а): поле script в обеих таблицах Blob, revision - Integer. Запрос под YA и FB.2.0. работал верно. На FB 2.1.0.17081 выходит ошибка:
Unsuccessful execution caused by system error that does not preclude successful execution of subsequent statements.
Datatype BLOB is not supported for sorting operation.
Заведи поле с хешем для блобов и будет те шасье

gsAlexander
Сообщения: 12
Зарегистрирован: 07 ноя 2007, 16:28

Сообщение gsAlexander » 04 дек 2007, 10:25

stix-s писал(а):
mdfv писал(а):
ORDER идёт по полю Integer.
обсчитался :oops:
дык не UNION ALL - следовательно предполагается DISTINCT, про что и написано по ссылке выше
Спасибо за ответ. Только как то это некрасиво с запросом...

stix-s
Заслуженный разработчик
Сообщения: 557
Зарегистрирован: 13 дек 2005, 11:52

Сообщение stix-s » 04 дек 2007, 10:29

gsAlexander писал(а):
Спасибо за ответ. Только как то это некрасиво с запросом...
Возможно и некрасиво, но ИМХО абсолютно правильно, ибо сервер опупеет вытаскивать все блобы немеряного размера в буфер для их сортировки и усечения
по-моему запрос сам некрасивый :)

Ответить