![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Использование Group by с полями типа BLOB [FB 1.5]
Leshiy © (2006-11-14 15:59:00)Здравствуйте.
Есть запрос:
Select
O.OrdNo,
O.Ord_Comment,
sum ( W.wn_amount ) WCount
from
Orders O
left join Windows W on (W.OrderID=O.OrderID)
where
O.OrderID=...
Group by 1,2
Он не работает т.к. поле Ord_Comment имеет тип Blob.
Преобразовать в строку его тоже нельзя.
Вариант:
Select
O.OrdNo,
O.Ord_Comment,
(select sum(w.wn_amount) from Windows W where w.Orderid=O.OrderId) WCount
from
Orders O
where
O.OrderID=...
не всегда удобен на более сложных запросах
Как быть?
ЮЮ (2006-11-15 10:13:00) [21]Оно свое на каждую запись Orders, но соединяя её с другой таблицей Windows {не поминай всуе имя его :)}(0..N), по полям которой и нужна сумма, он, естественно, получает его несколько раз
Johnmen (2006-11-15 09:43:00) [22]
> Leshiy © (15.11.06 06:19) [8]
> Но мне нужно содержимое этого поля.
Оно одинаковое для всех записей одной группы?
Для записей разных групп оно разное?
ЮЮ (2006-11-15 08:55:00) [23]
> В некоторых случаях приходится дублировать условия в запросе
> и подзапросах.
Странно, ведь это по сути подзапрос к Detail - таблице, как там могут появитьяся условия для мастер-таблицы
Leshiy (2006-11-15 07:48:00) [24]ЮЮ © (15.11.06 07:21) [9]
Варианты с переходам на другой сервер, а так-же заменой blob на varchar большого размера не подходят. т.к. работа ведется с готовым продуктом.
Кстати, чем он тебя так не устраивает?
В некоторых случаях приходится дублировать условия в запросе и подзапросах.
Глаз режет.
Может забить?
ЮЮ (2006-11-15 07:21:00) [25]Тогда только вариант 2 из твоего же вопроса.
Кстати, чем он тебя так не устраивает?
Или переходить на сервер, поддерживающий подзапрос не на уровне полей
Select
O.OrdNo,
O.Ord_Comment,
(select sum(w.wn_amount) from Windows W where w.Orderid=O.OrderId)WCount
from
Orders O
а на уровне таблиц:
Select
O.OrdNo,
O.Ord_Comment,
W.WCount
from
Orders O
left join (select Orderid, sum(wn_amount) from Windows group by OrderId) WON W.OrderID=O.OrderID
Leshiy (2006-11-15 06:19:00) [26]DrPass © (14.11.06 20:51) [7]
Но мне нужно содержимое этого поля.
DrPass (2006-11-14 20:51:00) [27]
> По БЛОБУ мне сортировка совсем не нужна, даже более того
> группировка в подобных запросах не нужна, но этого требуют
> агрегатные функции.
Если не нужна, то что тогда БЛОБ делает в агрегатной функции? Убери его из запроса
Leshiy (2006-11-14 18:59:00) [28]Sergey13 © (14.11.06 16:24) [2]
sniknik © (14.11.06 16:53) [3]
По БЛОБУ мне сортировка совсем не нужна, даже более того группировка в подобных запросах не нужна, но этого требуют агрегатные функции.
Jeer (2006-11-14 16:58:00) [29]clickmaker © (14.11.06 16:55) [4]
Использовать объектную СУБД - они могут по контексту с предварительной экспертизой:)
clickmaker (2006-11-14 16:55:00) [30]
> А как ты предполагаешь группировать по БЛОБ-у?
по степени художественной ценности текста, может?
sniknik (2006-11-14 16:53:00) [31]> А как ты предполагаешь группировать по БЛОБ-у?
а сортировать? ;) (кстати сортировка предваряет группировку (без этого она просто не делается))
Leshiy
смысл это делать, зачем? ну ну по первым 20 (максимум 100) символам это я еще понимаю, но по гигабайтным массивам информации...??? ну какоя кому разница, что там в 1000000001-ом символе (пример), в одном блобе стоит "а", а во втором "о"? и что страшного случится если порядок этих двух записей будет "неправильным"? до этого места все одно никто не дочитает.
если же там нет больших обьемов, и весь твой комментарий укладывается к примеру в 1000 символов то не проще сделать такое строковое поле (VarChar())?
Sergey13 (2006-11-14 16:24:00) [32]> не всегда удобен на более сложных запросах
А кому щас легко? А как ты предполагаешь группировать по БЛОБ-у?
Сергей М. (2006-11-14 16:15:00) [33]UDF