powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Update на основе данных другой таблицы в FireBird1.5
13 сообщений из 13, страница 1 из 1
Update на основе данных другой таблицы в FireBird1.5
    #32599038
VKV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VKV
Гость
Как выполнить обновление таблицы на основе данных другой таблицы???
Подскажите можно ли в 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
Update на основе данных другой таблицы в FireBird1.5
    #32599853
VKV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VKV
Гость
Может кто нибудь знает как решить эту проблему через <B>View</B>.
Через View, я попытался, т.е. использовать <B>update <Имя View> set <...></B>. Но View становится не модифицируемым при использовании таких средств как:
- <B>подзапросы</B>;
- агрегатных ф-ии;
- UDF;
- предложения <B>Distinct, having</B> и д.р.
В книге все эти ограничения предлагают обойти через триггер. У меня не получилось.

Не знаю как можно написать, что серъёзное не обновляя данные таблицы на основе данных других таблиц. Не уже ли ни укого такой проблемы не было, товарищи Мастера?
Если кто знает как решить эту проблему просто подскажите.
Текст свих запросов не даю потомучто наверняка сложно будет сразу разобраться. Если кто попросит то покажу.
...
Рейтинг: 0 / 0
Update на основе данных другой таблицы в FireBird1.5
    #32599877
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лично я ничего не понял что конкретно надо сделать.
...
Рейтинг: 0 / 0
Update на основе данных другой таблицы в FireBird1.5
    #32599881
Фотография alex777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А я бы сказал так мало того что не понял, а понял что ты пытаешся в системных таблицах лазить а это не есть ГУД, здесь я тебе не помощник
...
Рейтинг: 0 / 0
Update на основе данных другой таблицы в FireBird1.5
    #32599927
VKV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VKV
Гость
Стандартная конструкция:
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
Update на основе данных другой таблицы в FireBird1.5
    #32599939
Лентяй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может кто нибудь знает как решить эту проблему через View.

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

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

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

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

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

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

Код: 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
Update на основе данных другой таблицы в FireBird1.5
    #32599955
Лентяй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На вот почитай, может поможет... http://www.ibase.ru/devinfo/updsame.htm
Удачи.
...
Рейтинг: 0 / 0
Update на основе данных другой таблицы в FireBird1.5
    #32600029
VKV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VKV
Гость
Лентяй спасибо за сылку.
Первый пример получается медленным. И что самое плохое, что это единственный способ.

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

И все таки. Можно сделать через View и триггер, но уменя ни как не заработает. А в книге для етого случая пример триггера не расписан.
...
Рейтинг: 0 / 0
Update на основе данных другой таблицы в FireBird1.5
    #32600087
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А в процедуре ты это сделать не хочешь?
Если я правильно понял задачу, то в процедуре можно попробовать использовать 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
Update на основе данных другой таблицы в FireBird1.5
    #32600175
Лентяй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VKV Лентяй спасибо за сылку.
Первый пример получается медленным. И что самое плохое, что это единственный способ.

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

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

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

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


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