Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 Update полей одной таблицы на основании другой  [new]
K_olga
Guest
Будьте добры подскажите: мне нужно заменить значения поля1 таблицы1 на значения поля1 таблицы2 при соблюдении условия равенства поля3 этих таблиц, т.е. логичен был бы запрос вида:

UPDATE таблица1 SET таблица1.поле1=таблица2.поле1 WHERE таблица1.поле3=таблица2.поле3
Но насколько я понимаю таким образом меняется только одна первая запись, а мне нужно по всем записям. Как же быть?
19 мар 04, 10:31    [586820]     Ответить | Цитировать Сообщить модератору
 Re: Update полей одной таблицы на основании другой  [new]
АлександрК
Member

Откуда: Белгородская обл.
Сообщений: 121
Сканировать Таблицу2.

SELECT Таблица2
SCAN
UPDATE таблица1 SET ;
таблица1.поле1=таблица2.поле1 ;
WHERE таблица1.поле3=таблица2.поле3
ENDSCAN
19 мар 04, 10:46    [586884]     Ответить | Цитировать Сообщить модератору
 Re: Update полей одной таблицы на основании другой  [new]
Sergey Ch
Member

Откуда: Благовещенск
Сообщений: 8873
К сожалению привычный нам синтакс:


UPDATE {table_name | view_name}
SET [{table_name | view_name}]
{column_list
| variable_list
| variable_and_column_list}
[, {column_list2
| variable_list2
| variable_and_column_list2}
... [, {column_listN
| variable_listN
| variable_and_column_listN}]]
[FROM {table_name | view_name}
[, {table_name | view_name}]...]
[..., {table_name16 | view_name16}]]
[WHERE clause]


Не поддерживается до 8 версии включительно. Что-то изменить обещали в 9.

Напишите код... Мне кажется это пока единственный выход... Может кто и поправит...
19 мар 04, 11:01    [586943]     Ответить | Цитировать Сообщить модератору
 Re: Update полей одной таблицы на основании другой  [new]
Sergey Ch
Member

Откуда: Благовещенск
Сообщений: 8873
Долго отвечал :) Уже дали ответ...
19 мар 04, 11:02    [586946]     Ответить | Цитировать Сообщить модератору
 Re: Update полей одной таблицы на основании другой  [new]
foxwizard
Member

Откуда:
Сообщений: 302
Ну примерно так.

SELECT таблица1
SET RELATION TO поле3 INTO таблица2 ADDITIVE
REPLACE поле1 with таблица2.поле1 all

И быстро...
И работает...
Про индексы для связи не забываем.
19 мар 04, 12:04    [587151]     Ответить | Цитировать Сообщить модератору
 Re: Update полей одной таблицы на основании другой  [new]
K_olga
Guest
Работает. Всем большое спасибо!
19 мар 04, 14:15    [587591]     Ответить | Цитировать Сообщить модератору
 Re: Update полей одной таблицы на основании другой  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Ну, вообще-то, если есть индекс, то настривать RELATION - не обязательно:

SELECT Tab1
REPLACE Field1 WITH Tab2.Field2 FOR SEEK(Tab1.id,"Tab2","id")

Здесь предполагается, что в таблице Tab2 есть индексный TAG с именем id по полю id.
19 мар 04, 14:45    [587705]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить