Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Update на основе данных другой таблицы в FireBird1.5 / 13 сообщений из 13, страница 1 из 1
12.07.2004, 09:27:08
    #32599038
VKV
VKV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update на основе данных другой таблицы в FireBird1.5
Как выполнить обновление таблицы на основе данных другой таблицы???
Подскажите можно ли в FireBird1.5 выполнить нечто похожее.
Или команду update можно выполнять накладываю условие проверки только на обновляемую таблицу.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
update rdb$relation_fields
set rdb$null_flag = null,
    rdb$default_sourse =              
 --(select --lf."name_table", lf."field_name",
 
    case lf."field_type"
    when    'alpha'     then    ''
    when    'number'       then     1 
    when    'date'      then    '1.01.2004'
    else 'xxx'
    end
    from "list_fld" lf, rdb$relation_fields sys
where   (
            "field_lookup" is not null
            or "field_key" = '*'
            or "field_name" in
            (
            select "field_lookup" from "list_fld"
            where "field_lookup" is not null
            )
        )
        and
        (sys.rdb$relation_name = lf."name_table"
        and sys.rdb$field_name = lf."field_name")
 --)
 
...
Рейтинг: 0 / 0
12.07.2004, 15:05:02
    #32599853
VKV
VKV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update на основе данных другой таблицы в FireBird1.5
Может кто нибудь знает как решить эту проблему через <B>View</B>.
Через View, я попытался, т.е. использовать <B>update <Имя View> set <...></B>. Но View становится не модифицируемым при использовании таких средств как:
- <B>подзапросы</B>;
- агрегатных ф-ии;
- UDF;
- предложения <B>Distinct, having</B> и д.р.
В книге все эти ограничения предлагают обойти через триггер. У меня не получилось.

Не знаю как можно написать, что серъёзное не обновляя данные таблицы на основе данных других таблиц. Не уже ли ни укого такой проблемы не было, товарищи Мастера?
Если кто знает как решить эту проблему просто подскажите.
Текст свих запросов не даю потомучто наверняка сложно будет сразу разобраться. Если кто попросит то покажу.
...
Рейтинг: 0 / 0
12.07.2004, 15:12:02
    #32599877
Gold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update на основе данных другой таблицы в FireBird1.5
Лично я ничего не понял что конкретно надо сделать.
...
Рейтинг: 0 / 0
12.07.2004, 15:14:27
    #32599881
alex777
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update на основе данных другой таблицы в FireBird1.5
А я бы сказал так мало того что не понял, а понял что ты пытаешся в системных таблицах лазить а это не есть ГУД, здесь я тебе не помощник
...
Рейтинг: 0 / 0
12.07.2004, 15:31:39
    #32599927
VKV
VKV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update на основе данных другой таблицы в FireBird1.5
Стандартная конструкция:
Update <Таблица> set <поле1>='xxx'
where <условие>
<Условие> - накладывается только на Изменяюмую таблицу.

Я хочу:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Update <Таб1> 
set <Таб1>.<поле  2 >='xxx',
////////
    <Таб1>.<поле  3 >=<Таб2>.<поле  5 >
или
    <Таб1>.<поле  3 >=case <Таб2>.<поле  5 >
                         when '1' then 'a'
                         when '2' then 'b'
                         end
////////
where <Таб1>.<поле  1 > = <Таб2>.<поле  1 >

Такая вещь не прокатывает, потомучто <Таб2> должно быть описано после слова from. А конструкции Update <...> set <...> from ... в FB1.5 в отличии от MSSQL2000 нет.
Может так проще и понятней. Системные таблицы тут ни причем.
...
Рейтинг: 0 / 0
12.07.2004, 15:36:18
    #32599939
Лентяй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update на основе данных другой таблицы в FireBird1.5
Может кто нибудь знает как решить эту проблему через View.

Да какую проблему-то?

Через View, я попытался, т.е. использовать update <Имя View> set <...>. Но View становится не модифицируемым при использовании таких средств как:
- подзапросы;
- агрегатных ф-ии;
- UDF;
- предложения <B>Distinct, having</B> и д.р.
В книге все эти ограничения предлагают обойти через триггер. У меня не получилось.

Чего не получилось?

Если кто знает как решить эту проблему просто подскажите.
Текст свих запросов не даю потомучто наверняка сложно будет сразу разобраться. Если кто попросит то покажу.

В правильно сформулированном вопросе содержиться большая часть ответа.

Удачи.
...
Рейтинг: 0 / 0
12.07.2004, 15:41:51
    #32599953
mv
mv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update на основе данных другой таблицы в FireBird1.5
Судя по всему, Ваше предложение допустимо. Хотя не совсем понятно. Возможно, Вы имели в виду:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
update rdb$relation_fields
set rdb$null_flag = null,
    rdb$default_sourse =              
(select  --lf."name_table", lf."field_name",
 
    case lf."field_type"
    when    'alpha'     then    ''
    when    'number'       then     1 
    when    'date'      then    '1.01.2004'
    else 'xxx'
    end
    from "list_fld" lf, rdb$relation_fields sys
where   (
            "field_lookup" is not null
            or "field_key" = '*'
            or "field_name" in
            (
            select "field_lookup" from "list_fld"
            where "field_lookup" is not null
            )
        )
        and
        (sys.rdb$relation_name = lf."name_table"
        and sys.rdb$field_name = lf."field_name")
)


Что такое "rdb$default_sourse"? Очень подозреваю, что такого поля нет в природе...

Единственное замечание: при работе с командами модификации, обратите внимание на то, что Вы не можете в предложении FROM любого подзапроса, модифицировать таблицу к которой ссылаетесь с помощью основной команды. Это относится ко всем трем командам модификации. Еще: не делайте ссылки к текущей строке таблицы указанной в команде, которая является соотнесенным подзапросом.
...
Рейтинг: 0 / 0
12.07.2004, 15:42:29
    #32599955
Лентяй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update на основе данных другой таблицы в FireBird1.5
На вот почитай, может поможет... http://www.ibase.ru/devinfo/updsame.htm
Удачи.
...
Рейтинг: 0 / 0
12.07.2004, 16:13:47
    #32600029
VKV
VKV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update на основе данных другой таблицы в FireBird1.5
Лентяй спасибо за сылку.
Первый пример получается медленным. И что самое плохое, что это единственный способ.

Код: plaintext
1.
2.
3.
update TABLE1 
set FIELD1 = (select PRIMARYKEY 
              from TABLE1 T1 
              where T1.FIELD1=FIELD2)

И все таки. Можно сделать через View и триггер, но уменя ни как не заработает. А в книге для етого случая пример триггера не расписан.
...
Рейтинг: 0 / 0
12.07.2004, 16:36:43
    #32600087
Gold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update на основе данных другой таблицы в FireBird1.5
А в процедуре ты это сделать не хочешь?
Если я правильно понял задачу, то в процедуре можно попробовать использовать RDB$DB_KEY в таком духе:

FOR SELECT T1.RDB$DB_KEY,T2.RDB$DB_KEY
FROM TABLE1 T1 JOIN TABLE2 T2
INTO :KEY1,:KEY2
DO
UPDATE TABLE1 SET ZZZ=(SELECT ... FROM TABLE2 WHERE RDB$DB_KEY=:KEY2)
WHERE RDB$DB_KEY=:KEY1;
...
Рейтинг: 0 / 0
12.07.2004, 17:10:26
    #32600175
Лентяй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update на основе данных другой таблицы в FireBird1.5
VKV Лентяй спасибо за сылку.
Первый пример получается медленным. И что самое плохое, что это единственный способ.

Код: plaintext
1.
2.
3.
update TABLE1 
set FIELD1 = (select PRIMARYKEY 
              from TABLE1 T1 
              where T1.FIELD1=FIELD2)

И все таки. Можно сделать через View и триггер, но уменя ни как не заработает. А в книге для етого случая пример триггера не расписан.

А индекс по t1.field1 присутствует?
...
Рейтинг: 0 / 0
12.07.2004, 17:14:42
    #32600187
VKV
VKV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update на основе данных другой таблицы в FireBird1.5
Все зависит от количеста строк в таблицах. Тут и индекс не поможет.
Хуже другое, вместо того чтобы Изменить выборочные записи, он (запрос) все равно будет проходить все записи таблицы. Потомочто условие связывания нельзя добавить в Where предложения Update.
...
Рейтинг: 0 / 0
12.07.2004, 17:36:24
    #32600251
Лентяй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update на основе данных другой таблицы в FireBird1.5
VKVВсе зависит от количеста строк в таблицах. Тут и индекс не поможет.
Хуже другое, вместо того чтобы Изменить выборочные записи, он (запрос) все равно будет проходить все записи таблицы. Потомочто условие связывания нельзя добавить в Where предложения Update.

Чего-то я не понял. Этот запрос меняет ВСЕ записи, как же ему их не "проходить" ВСЕ? Если менять надо не все - то почему бы where не добавить?
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Update на основе данных другой таблицы в FireBird1.5 / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]