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

т.е. типа такого:
update table1 set table1.f1 = table2.f1, table1.f2 = table2.f2, ...
where table1.f3 = table2.f3
так не работает конечно.
...
Рейтинг: 0 / 0
17.02.2004, 15:23
    #32412160
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
update нескольких полей одной таблицы полями др. таблицы?
Код: 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
17.02.2004, 15:27
    #32412174
Имя пользователя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
update нескольких полей одной таблицы полями др. таблицы?
спасибо. так и думал ...
...
Рейтинг: 0 / 0
17.02.2004, 15:34
    #32412195
Имя пользователя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
update нескольких полей одной таблицы полями др. таблицы?
хотя и так тоже не получается.
мне надо в условии update'а написать

where table1.f3 = table2.f3

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

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

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

Вопросы?
...
Рейтинг: 0 / 0
17.02.2004, 16:39
    #32412368
Могун
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
update нескольких полей одной таблицы полями др. таблицы?
как итог, вот такая тормозная конструкция:
Код: 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
17.02.2004, 16:44
    #32412386
Имя пользователя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
update нескольких полей одной таблицы полями др. таблицы?
все подрубил! thanx
меня немного смутила конструкция
1=(select count(*)
...
Рейтинг: 0 / 0
17.02.2004, 16:46
    #32412390
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
update нескольких полей одной таблицы полями др. таблицы?
Могун
Код: 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
17.02.2004, 16:54
    #32412414
Могун
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
update нескольких полей одной таблицы полями др. таблицы?
В данном случае EXISTS возможно читабельнее, насчет эффективности - не знаю, а привычка использовать COUNT(*) - из за NULL, из-за возможной необходимости знать точное количество совпадений (например 1<=COUNT(*) - одна или ни одной, 2=COUNT(*)-точно две) и хронической лени переписывать код целиком, проще цифирь и условие поправить. Привычка такая.
...
Рейтинг: 0 / 0
17.02.2004, 16:59
    #32412426
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
update нескольких полей одной таблицы полями др. таблицы?
Ну и зря. Если нужно просто установить факт наличия записей, удовлетворяющих некоему условию, то COUNT() не самая эффективная конструкция. Особенно на больших объёмах.
...
Рейтинг: 0 / 0
17.02.2004, 17:08
    #32412446
Могун
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
update нескольких полей одной таблицы полями др. таблицы?
есть конкретные результаты тестов? Умозрительно, я думаю, вы правы.
...
Рейтинг: 0 / 0
17.02.2004, 17:55
    #32412547
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
update нескольких полей одной таблицы полями др. таблицы?
Есть ТЕСТ
Там COUNT() даже не рассматривается как вариант.
Если есть желание, можно прогнать его на приводимых скриптах.
Результаты, имхо, будут впечатляющие ;)
...
Рейтинг: 0 / 0
17.02.2004, 18:44
    #32412630
Могун
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
update нескольких полей одной таблицы полями др. таблицы?
Спасибо, попробую на досуге. Но для точного количества совпадений такой вариант не работает.
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / update нескольких полей одной таблицы полями др. таблицы? / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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