powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / UPDATE T1 по Т2
8 сообщений из 8, страница 1 из 1
UPDATE T1 по Т2
    #33286585
MikeLed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите, плз.
Есть две табл. Т1 и Т2 с одинаковыми индексными полями Т1.К1 и Т2.К1.
Другие поля могут отличаться. И количество полей разное.
Необходимо сделать UPDATE T1 по Т2, т.е. изменить необходимые поля, которые изменились в Т2 и Добавить новые записи из Т2 в Т1.
С добавлением вроде понятно - INSERT INTO.... SELECT ... FROM ... WHERE...
А как сделать обновление (можно ли обойтись без SCAN)?
Или можно ли выполнить задачу одним оператором SQL?
...
Рейтинг: 0 / 0
UPDATE T1 по Т2
    #33286616
Фотография Hel!Riser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
UPDATE t1 SET MyField=(SELECT t2.MyField FROM t1 INNER JOIN t2 ON t1.k1=t2.k1)
...
Рейтинг: 0 / 0
UPDATE T1 по Т2
    #33286666
MikeLed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хитро. Спасибо.
...
Рейтинг: 0 / 0
UPDATE T1 по Т2
    #33286828
MikeLed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Суть была понятна. Но
1. Ругается на скобки-??? (VFP8)
2. И что мне возвращает сам SELECT- (тысячи записей) ???
...
Рейтинг: 0 / 0
UPDATE T1 по Т2
    #33286917
mvictor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
боюсь что в VFP8 такое не пройдет
в VFP9 - да
...
Рейтинг: 0 / 0
UPDATE T1 по Т2
    #33286939
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если связь вида один-к-одному или много-к-одному, то в младших версиях FoxPro это делается так:

Код: plaintext
1.
2.
3.
4.
5.
6.
SELECT t1
SET ORDER TO  0   && для ускорения работы
REPLACE FOR SEEK(t1.K1,"t2","K2") ;
	Field1 WITH t2.Field1, ;
	Field2 WITH t2.Field2, ;
	Field3 WITH t2.Field3

Здесь я предполагаю, что таблица t2 уже открыта и у нее существует индексный тэг по полю K2, который так и называется K2. Делать этот индекс главным - не обязательно.

Только следует иметь в виду, что такая команда REPLACE на время своего выполнения заблокирует всю таблицу t1. Вне зависимости от того, сколько фактически записей будет изменено. Поэтому, обычно такие команды предваряют ручной блокировкой всей таблицы

Код: plaintext
1.
2.
3.
4.
5.
SELECT t1
IF FLOCK()=.T.
	REPLACE FOR ...
	UNLOCK
ENDIF
...
Рейтинг: 0 / 0
UPDATE T1 по Т2
    #33287003
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi MikeLed!

Забей - в VFP8 делай SCAN или Relation + REPLACE ALL (или в FOR часть
REPLACE поставь хитрый SEEK() для второй таблицы - чтоб "связь"
организовалась).
В VFP9 можно и подзапросом, и "коррелированным UPDATE" - это типа (из хелпа)
Код: plaintext
UPDATE MyProducts SET MSRP=MyUpdates.MSRP FROM MyUpdates WHERE MyProducts.ProdID=MyUpdates.ProdID


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
UPDATE T1 по Т2
    #33287028
MikeLed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем огромное спасибо.
ВЫВОД: Хочешь жить красиво - живи в ногу со временем, т.е. надо переходить на девятку.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / UPDATE T1 по Т2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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