powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Вопрос по UPDATE
14 сообщений из 14, страница 1 из 1
Вопрос по UPDATE
    #38353710
Людмila
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UPDATE Tеmp SET Dms=(sele Dms from A_DMS WHERE Id=Temp.Id)
данное заполнение поля Dms стопориться при получении от Selecta значения NULL
как нибудь обыграть это можно?
...
Рейтинг: 0 / 0
Вопрос по UPDATE
    #38353755
Людмila,
I. есть два варианта:
1. разрешить писать Null в соответствующее поле таблицы
2. Использовать функции для преобразования Null в значение "по умолчанию".
В Фоксе это NVL(), в MS SQL, PostrgreSQL - coalesce()

II. я бы ваш запрос переписал в виде:
Код: sql
1.
2.
3.
UPDATE Tеmp SET Dms= A_DMS.DMS
from A_DMS 
WHERE A_DMS.Id=Temp.Id
...
Рейтинг: 0 / 0
Вопрос по UPDATE
    #38354140
Людмila
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по всей видимости затмение головного мозга на меня нашло.
благодаря подсказке чуть поправилась
UPDATE Tеmp SET Dms=NVL((sele Dms from A_DMS WHERE Id=Temp.Id),.F.)
Спасибо!
...
Рейтинг: 0 / 0
Вопрос по UPDATE
    #38354145
Людмila,
так DMS (судя по представленной NVL()) может принимать значения только True и False?! Зачем тогда огород городить?
можно написать так:
Код: sql
1.
2.
3.
UPDATE Tеmp SET Dms= .T.
From  A_DMS 
where A_DMS.Id=Temp.Id



Кстати, читая всезнающий Хелп, увидел пример, один-в-один напоминающий Ваш:
Update-SQL, VFP9Example 5
The following an example of a correlated update in which the update results include only the first match found for a record. Other matches for the record are ignored. The example code specifies two cursors. The first is the target for the updates. The second is the source of the updates and contains two changes for the first record in the target cursor and one update that does not match any records in the target cursor. In the results, the value of the first record shows the first match of .50 and not 10.00, the value of the second match.

CopyCode imageCopy Code
CLOSE DATABASES ALL
CREATE CURSOR MyProducts (ProdID I , ProdCategory I NULL, MSRP Y NULL)
INSERT INTO MyProducts VALUES (1,9,1.00)
INSERT INTO MyProducts VALUES (2,8,2.00)
INSERT INTO MyProducts VALUES (3,7,3.00)

CREATE CURSOR MyUpdates (ProdID I , MSRP Y)
INSERT INTO MyUpdates VALUES (1,.50) && Matches and updates.
INSERT INTO MyUpdates VALUES (2,20.00) && Matches and updates.
INSERT INTO MyUpdates VALUES (4,40.00) && No match
INSERT INTO MyUpdates VALUES (1,10.00)&& 2nd match but no update.

UPDATE MyProducts SET MSRP=MyUpdates.MSRP FROM MyUpdates WHERE MyProducts.ProdID=MyUpdates.ProdID

SELECT MyProducts
BROWSE

Так что, как ни прискорбно это говорить, но RTFM!!!
...
Рейтинг: 0 / 0
Вопрос по UPDATE
    #38354274
Людмila
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
протестировала на время-выполнения свой поправленный вариант и предложенные на ~30000 записей (под Update по условию попадались всего 30-40)

nSec=Seconds()
UPDATE ...............................
?Seconds()-nSec && получалось всегда 0

Но предложенные варианты предпочтительнее тем, что мой:
UPDATE Tеmp SET Dms=NVL((sele Dms from A_DMS WHERE Id=Temp.Id),.F.)
"споткнётся" если подзапрос Select вернёт более 1 значения! :(
...
Рейтинг: 0 / 0
Вопрос по UPDATE
    #38354299
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛюдмilaWHERE >>>Id<<<=Temp.Id
Людмilaесли подзапрос Select вернёт более 1 значенияу вас id не уникален, что ли?
...
Рейтинг: 0 / 0
Вопрос по UPDATE
    #38354317
Людмila
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уточняю.
в таблице A_DMS поле Id не уникально
...
Рейтинг: 0 / 0
Вопрос по UPDATE
    #38354453
alextashk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Людмila,

Код: sql
1.
UPDATE Tеmp SET Dms=NVL((sele TOP 1 Dms from A_DMS WHERE Id=Temp.Id),.F.)



Поскольку id не уникально, значит Вам всё равно что вернёт подзапрос
...
Рейтинг: 0 / 0
Вопрос по UPDATE
    #38354534
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Людмila?Seconds()-nSec && получалось всегда 0

По существу уже написали. Хочу методику замера прокомментировать: она будет правильная, если предварительно эту же табличку открыть по сетке с другого компа. Локально - это замер площади сферического коня в вакууме.
...
Рейтинг: 0 / 0
Вопрос по UPDATE
    #38354581
Людмila
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В моём случае действительно всё равно что вернет подзапрос, цель - наличие данного ID в таблице A_DMC.
если бы цель была иной, то условие WHERE в подзапросе можно было бы развить, да и сам возврат.

А по поводу методики замеров скорости выполнения, то хоть уверена, что программно тормозов.нет!
Конечно все понимают, что по лакалке результаты будут другими. Да и локалка-локалке-рознь.
...
Рейтинг: 0 / 0
Вопрос по UPDATE
    #38354594
Людмila
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да ещё запросы с ТОР 1 у меня не работают (FoxPro9)
UPDATE Tеmp SET Dms=NVL((sele TOP 1 Dms from A_DMS WHERE Id=Temp.Id),.F.)
выдаёт ошибку - просит добавить ORDER BY (ну зачем он нужен там?)
ставим ORDER BY и полетели!
может из-за SET ENGINEBEHAVIOR 70
...
Рейтинг: 0 / 0
Вопрос по UPDATE
    #38354892
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Людмilaвыдаёт ошибку - просит добавить ORDER BY (ну зачем он нужен там?)"шоб було"(с)
Ну поставьте ему ордербай, раз просит. Жалко, что ли? :)
...
Рейтинг: 0 / 0
Вопрос по UPDATE
    #38355201
Людмila
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну ставлю, пусть подавиться.
но зачем ему ORDER BY для одной записи? (вопрос риторический)
...
Рейтинг: 0 / 0
Вопрос по UPDATE
    #38355262
ЛюдмilaНу ставлю, пусть подавиться.
но зачем ему ORDER BY для одной записи? (вопрос риторический)
Order By - упорядочивает записи в полученном множестве...
А множество, вот парадокс, не перестает оставаться множеством, даже если оно пустое...
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Вопрос по UPDATE
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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