![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Простой запрос из MSSQL2000 не работает в FireBerd1.5 [IB6.x, MSSQL]
VadimKV © (2004-07-08 15:13:00)Элементарный запрос MSSQL2000.
В этом запросе данные берутся из вложенного запроса (который фактически формирует таблицу)- этот запрос наверное называется вложенным.
selectt.field_name from
( selectfield_name fromlist_fld) ast
В FireBerd1.5/IB6 приведенный ниже запрос тоже называется вложенным, но это разные запросы, т.к. данные берутся не из вложенного запроса в скобках.
selectfield_name fromlist_fld
wherefield_name in
( selectfield_name fromlist_fld)
Псевдоним присвоить тут нельзя т.к. запрос после Where.
А первый запрос из MSSQL2000 в своем первоначальном виде в FireBerd1.5 не работает.
Как реализовать конструкцию запроса MSSQL в FireBerd1.5?
Курдль (2004-07-11 20:46:00) [1]
> Desdechado © (10.07.04 14:53) [28]
> По поводу концептуальной модели - очень правильно, вот только
> БД должна некоей мерой быть защищена от дурака.
А я разве сказал про отсутствие защиты? Вам удобно что-то компоновать в домены (если я правильно понял). Я же это делаю на уровне концептуальной модели. При автоматической генерации CASE-средствами физической модели БД, а потом и скрипта самой базы, эти правила реализуются на основании идеологии СУБД. Причем, не важно, какойСУБД. С некоторых пор я даже не проверяю скрипты - мои инструменты ни разу еще не подводили.
Fay (2004-07-10 15:51:00) [2]2Desdechado © (10.07.04 14:53) [28]
>> можно одним махом поменять его - и все поля пойдут одной дорогой.
Давно не проверял, под рукой нет. Но память говорит, что так не получится.
Desdechado (2004-07-10 14:53:00) [3]DISTINCT с блобом мне тоже как-то не нужно было, а вот с CLOB вполне может и понадобиться :) Хотя еще не было такого случая.
Просто в голову пришло попробовать, как сервера соблюдают правила :)
2 Fay
Пробовал, ничего не вышло (по крайней мере, в FB1), но это не умаляет их достоинств. На уровне таблиц можно сделать много вещей, чтоб не лепить в триггеры. Да и один домен в 10 разных местах использовав, можно одним махом поменять его - и все поля пойдут одной дорогой.
По поводу концептуальной модели - очень правильно, вот только БД должна некоей мерой быть защищена от дурака, чтобы помимо тех правил, что придумал разработчик, кто-нибудь по своим правилам не записал туда что-то, что программа потом не опознает за корректные данные.
Fay (2004-07-10 02:44:00) [4]Desdechado © (09.07.04 13:49) [25]
Не пробовали использовать домены в ХП? Попробуйте - очень бодрит! 8)
Курдль (2004-07-09 23:20:00) [5]
> Desdechado © (09.07.04 13:46) [24]
> SELECT DISTINCT int_field, BLOB_field from tbl
> В FB проходит, причем правильно, а Оракл гневно ругается
Точно! В Оракле-8: "Inconsistent Datatypes". Однако, не могу себе представить надобность такой фитчи. Пока не надобилась :)
> Desdechado © (09.07.04 13:49) [25]
> Я уж не говорю про понятие домена, который может содержать
> всякие ограничения на содержимое и проверки.
А зачем? Зачем это держать на уровне базы? Это все прописывается на уровне концептуальной модели - домены, бизнес-правила и т.п.
Какая разница. как это все "ложится" в БД?
Desdechado (2004-07-09 13:49:00) [6]2 Курдль © (08.07.04 15:43) [10]
Я уж не говорю про понятие домена, который может содержать всякие ограничения на содержимое и проверки, а в Оракле я аналога не знаю. Мож кто подскажет? Или я так и останусь с мыслью, что здесь недоработочка...
Desdechado (2004-07-09 13:46:00) [7]Курдль © (08.07.04 15:43) [10]
А причем здесь Оракл? Чего это он не умеет, что умеет IB?
попробуй сделать
SELECT DISTINCT int_field, BLOB_field from tbl
В FB проходит, причем правильно, а Оракл гневно ругается :)
Danilka (2004-07-09 11:27:00) [8][18] Sandman25 © (08.07.04 15:55)
> Мой "рекорд" - 29 kb :)
Ужас! :))
Я с больше чем 15к не работал, а сам не писал.
Точнее, писал когда-то что-то сравнимое, но из-за особенностей генератора отчетов.
Fay (2004-07-08 19:30:00) [9]Курдль © (08.07.04 15:43) [10]
> Чего это он не умеет, что умеет IB??? 8-()
Нравит ься просто так без причин. 8)
Sandman25 (2004-07-08 16:04:00) [10]") as max_key" забыл удалить
Sandman25 (2004-07-08 16:03:00) [11]select name_table,
sum(
case
when field_type = 'long' then 4
when field_type = 'alpha' then field_size
when field_type = 'number' then 8
when field_type = 'date' then 4
end
) as size_field
from list_fld
where field_key = '*'
group by name_table) as max_key
having sum(
case
when field_type = 'long' then 4
when field_type = 'alpha' then field_size
when field_type = 'number' then 8
when field_type = 'date' then 4
end
) > 195
VadimKV (2004-07-08 15:58:00) [12]Sandman25 так что, в FireBerd1.5 такую конструкцию совсем не льзя реализовать - select * from (<запрос>)
Незнаю как вы считаетя, а Я думаю такая конструкция жизненно необходимо. Вот пример где без этого кажется не обойтись.
(selectname_table, size_field from /*Здесь данные берутся как из таблицы*/
(selectname_table,
sum( /*Сумма*/
case
whenfield_type = 'long' then4
whenfield_type = 'alpha' thenfield_size
whenfield_type = 'number' then8
whenfield_type = 'date' then4
end
) assize_field
fromlist_fld
wherefield_key = '*'
group byname_table ) asmax_key
wheresize_field > 195 ) asTb_mk /*Это условие накладывается на данные вычесленные в предыдущем запросе*/
Если действительно, кто то знает как решить эту проблему подскажите.
Sandman25 (2004-07-08 15:55:00) [13][14] Danilka © (08.07.04 15:49)
Мой "рекорд" - 29 kb :)
Danilka (2004-07-08 15:53:00) [14][15] Курдль © (08.07.04 15:50)
> а в Оракле до 9-ки такое не акнало
в восьмерке канает. :))
Danilka (2004-07-08 15:51:00) [15][13] Johnmen © (08.07.04 15:45)
> Но очень сложно представить (по большому счету), когда без
> "запрос из запроса" не обойтись.
Всегда можно как-то выкрутиться, но так и тянет к халяве. :))
Курдль (2004-07-08 15:50:00) [16]
> Sandman25 © (08.07.04 15:44) [12]
> На IB невозможно построить плохие запросы вида [8]
Насколько я помню, в IB можно делать "запрос внутри запроса" типа
select T1.*, (select sum(T2.SUMMA) from TABLE_2 T2 where T2.T1_ID = T1.T1_ID) as T1_SUMMA from TABLE_1 T1
а в Оракле до 9-ки такое не акнало (только через танцы с группировкой).
Danilka (2004-07-08 15:49:00) [17][10] Курдль © (08.07.04 15:43)
Наоборот, этой фишки нет в ИБ.
Можно сделать селект из таблицы, либо из вьюхи, а МС-Скуль и Орокол селект из селекта позволяет делать.
[11] Sandman25 © (08.07.04 15:43)
> позволяет страшные вещи делать
Вот именно. Из-за этго потом и появляются запросы на полтора десятка килобайт, которые разгребать умучаешься - почему тормоза. Особенно, когда селект из селекта в котором используются другие вьюхи. :))
> Чтобы делать тормозные вьюхи, запросы из запроса необязательны.
> :( или :)
Но, желательны. :))
Просто, это развязывает руки и начинаешь эту халяву использовать там, где можно спокойно обойтись без нее.
Johnmen (2004-07-08 15:45:00) [18]>VadimKV
В ИБ нет конструкции "запрос из запроса".
Его можно сымитировать с пом. VIEW.
Но очень сложно представить (по большому счету), когда без "запрос из запроса" не обойтись. Обычно необходятся те, про кот.намекнул Danilka © (08.07.04 15:34) [7]
:)))
Sandman25 (2004-07-08 15:44:00) [19][10] Курдль © (08.07.04 15:43)
На IB невозможно построить плохие запросы вида [8]
PS. А вообще-то я пытался пошутить :)
Sandman25 (2004-07-08 15:43:00) [20][9] Danilka © (08.07.04 15:39)
Я недавно занимался MSSQL, мне эта фича очень понравилась, позволяет страшные вещи делать. Наконец-то в версии 9.4 Informix'а появился аналог.
Чтобы делать тормозные вьюхи, запросы из запроса необязательны. :( или :)