Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Вопрос по UPDATE / 14 сообщений из 14, страница 1 из 1
03.08.2013, 00:54
    #38353710
Людмila
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по UPDATE
UPDATE Tеmp SET Dms=(sele Dms from A_DMS WHERE Id=Temp.Id)
данное заполнение поля Dms стопориться при получении от Selecta значения NULL
как нибудь обыграть это можно?
...
Рейтинг: 0 / 0
03.08.2013, 06:19
    #38353755
Вопрос по UPDATE
Людм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
04.08.2013, 04:15
    #38354140
Людмila
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по UPDATE
по всей видимости затмение головного мозга на меня нашло.
благодаря подсказке чуть поправилась
UPDATE Tеmp SET Dms=NVL((sele Dms from A_DMS WHERE Id=Temp.Id),.F.)
Спасибо!
...
Рейтинг: 0 / 0
04.08.2013, 05:12
    #38354145
Вопрос по UPDATE
Людм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
04.08.2013, 13:44
    #38354274
Людмila
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по UPDATE
протестировала на время-выполнения свой поправленный вариант и предложенные на ~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
04.08.2013, 14:17
    #38354299
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по UPDATE
ЛюдмilaWHERE >>>Id<<<=Temp.Id
Людмilaесли подзапрос Select вернёт более 1 значенияу вас id не уникален, что ли?
...
Рейтинг: 0 / 0
04.08.2013, 14:54
    #38354317
Людмila
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по UPDATE
Уточняю.
в таблице A_DMS поле Id не уникально
...
Рейтинг: 0 / 0
04.08.2013, 19:04
    #38354453
alextashk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по UPDATE
Людмila,

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



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

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

А по поводу методики замеров скорости выполнения, то хоть уверена, что программно тормозов.нет!
Конечно все понимают, что по лакалке результаты будут другими. Да и локалка-локалке-рознь.
...
Рейтинг: 0 / 0
04.08.2013, 23:22
    #38354594
Людмila
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по UPDATE
Да ещё запросы с ТОР 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
05.08.2013, 12:12
    #38354892
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по UPDATE
Людмilaвыдаёт ошибку - просит добавить ORDER BY (ну зачем он нужен там?)"шоб було"(с)
Ну поставьте ему ордербай, раз просит. Жалко, что ли? :)
...
Рейтинг: 0 / 0
05.08.2013, 14:30
    #38355201
Людмila
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по UPDATE
Ну ставлю, пусть подавиться.
но зачем ему ORDER BY для одной записи? (вопрос риторический)
...
Рейтинг: 0 / 0
05.08.2013, 15:01
    #38355262
Вопрос по UPDATE
ЛюдмilaНу ставлю, пусть подавиться.
но зачем ему ORDER BY для одной записи? (вопрос риторический)
Order By - упорядочивает записи в полученном множестве...
А множество, вот парадокс, не перестает оставаться множеством, даже если оно пустое...
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Вопрос по UPDATE / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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