powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / update нескольких полей одной таблицы полями др. таблицы?
15 сообщений из 15, страница 1 из 1
update нескольких полей одной таблицы полями др. таблицы?
    #32412144
Имя пользователя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как написать update нескольких полей одной таблицы полями др. таблицы?

т.е. типа такого:
update table1 set table1.f1 = table2.f1, table1.f2 = table2.f2, ...
where table1.f3 = table2.f3
так не работает конечно.
...
Рейтинг: 0 / 0
update нескольких полей одной таблицы полями др. таблицы?
    #32412160
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
update table1 
  set table1.f1 = (select table2.f1 from table2 where table2.f3 = table1.f3),
      table1.f2 = (select table2.f2 from table2 where table2.f3 = table1.f3),
       ... 
where ...


У-вы. Или так, или процедуру писать.
...
Рейтинг: 0 / 0
update нескольких полей одной таблицы полями др. таблицы?
    #32412174
Имя пользователя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо. так и думал ...
...
Рейтинг: 0 / 0
update нескольких полей одной таблицы полями др. таблицы?
    #32412195
Имя пользователя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хотя и так тоже не получается.
мне надо в условии update'а написать

where table1.f3 = table2.f3

в ответ получаю типа

Column unknown. table2.f3
...
Рейтинг: 0 / 0
update нескольких полей одной таблицы полями др. таблицы?
    #32412237
Могун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То, что вы хотите написать в условии для изменения можно попытаться сделать так:

Код: plaintext
1.
2.
3.
update table1 t1 set
  ....
where
   1 =(select count(*) from table2 t2 where t2.f3=t1.f3)
...
Рейтинг: 0 / 0
update нескольких полей одной таблицы полями др. таблицы?
    #32412329
Имя пользователя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в итоге написал процедуру.
2Могун а можно небольшой комментарий? plz
может я совсем ламер, а может день сегодня такой ... но я не понял как тут теперь что ...
...
Рейтинг: 0 / 0
update нескольких полей одной таблицы полями др. таблицы?
    #32412354
Могун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если Вы не хотите изменить ВСЕ записи в table1, то, естественно, пишите условие, которое ограничивает набор строк, которые будут изменены. Из Вашего вопроса я сделал вывод(возможно неверный), что вам необходимо изменять только такие строки в table1, которые имееют ссылку на table2 по полю f3 - это и есть условие. Новые значения полей для table1 выбираются так, как писал Мимопроходящий, или же через ХП.

Вопросы?
...
Рейтинг: 0 / 0
update нескольких полей одной таблицы полями др. таблицы?
    #32412368
Могун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как итог, вот такая тормозная конструкция:
Код: plaintext
1.
2.
3.
4.
update table1 t1 set
  t1.f1 = (select t2.f1 from table2 t2 where t2.f3 = t1.f3)
, t1.f2 = (select t2.f2 from table2 t2 where t2.f3 = t1.f3)
where
   1 =(select count(*) from table2 t2 where t2.f3=t1.f3)
...
Рейтинг: 0 / 0
update нескольких полей одной таблицы полями др. таблицы?
    #32412386
Имя пользователя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
все подрубил! thanx
меня немного смутила конструкция
1=(select count(*)
...
Рейтинг: 0 / 0
update нескольких полей одной таблицы полями др. таблицы?
    #32412390
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Могун
Код: plaintext
1.
where
   1 =(select count(*) from table2 t2 where t2.f3=t1.f3)

Ну ведь есть же нормальная конструкция EXISTS , нафига ж такой изврат?!.
Почему бы не написать по людски:

Код: plaintext
where EXISTS(select  1  from table2 t2 where t2.f3=t1.f3)
...
Рейтинг: 0 / 0
update нескольких полей одной таблицы полями др. таблицы?
    #32412414
Могун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В данном случае EXISTS возможно читабельнее, насчет эффективности - не знаю, а привычка использовать COUNT(*) - из за NULL, из-за возможной необходимости знать точное количество совпадений (например 1<=COUNT(*) - одна или ни одной, 2=COUNT(*)-точно две) и хронической лени переписывать код целиком, проще цифирь и условие поправить. Привычка такая.
...
Рейтинг: 0 / 0
update нескольких полей одной таблицы полями др. таблицы?
    #32412426
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и зря. Если нужно просто установить факт наличия записей, удовлетворяющих некоему условию, то COUNT() не самая эффективная конструкция. Особенно на больших объёмах.
...
Рейтинг: 0 / 0
update нескольких полей одной таблицы полями др. таблицы?
    #32412446
Могун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть конкретные результаты тестов? Умозрительно, я думаю, вы правы.
...
Рейтинг: 0 / 0
update нескольких полей одной таблицы полями др. таблицы?
    #32412547
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть ТЕСТ
Там COUNT() даже не рассматривается как вариант.
Если есть желание, можно прогнать его на приводимых скриптах.
Результаты, имхо, будут впечатляющие ;)
...
Рейтинг: 0 / 0
update нескольких полей одной таблицы полями др. таблицы?
    #32412630
Могун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, попробую на досуге. Но для точного количества совпадений такой вариант не работает.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / update нескольких полей одной таблицы полями др. таблицы?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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