|
Вопрос по UPDATE
|
|||
---|---|---|---|
#18+
UPDATE Tеmp SET Dms=(sele Dms from A_DMS WHERE Id=Temp.Id) данное заполнение поля Dms стопориться при получении от Selecta значения NULL как нибудь обыграть это можно? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2013, 00:54 |
|
Вопрос по UPDATE
|
|||
---|---|---|---|
#18+
Людмila, I. есть два варианта: 1. разрешить писать Null в соответствующее поле таблицы 2. Использовать функции для преобразования Null в значение "по умолчанию". В Фоксе это NVL(), в MS SQL, PostrgreSQL - coalesce() II. я бы ваш запрос переписал в виде: Код: sql 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2013, 06:19 |
|
Вопрос по UPDATE
|
|||
---|---|---|---|
#18+
по всей видимости затмение головного мозга на меня нашло. благодаря подсказке чуть поправилась UPDATE Tеmp SET Dms=NVL((sele Dms from A_DMS WHERE Id=Temp.Id),.F.) Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2013, 04:15 |
|
Вопрос по UPDATE
|
|||
---|---|---|---|
#18+
Людмila, так DMS (судя по представленной NVL()) может принимать значения только True и False?! Зачем тогда огород городить? можно написать так: Код: sql 1. 2. 3.
Кстати, читая всезнающий Хелп, увидел пример, один-в-один напоминающий Ваш: 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!!! ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2013, 05:12 |
|
Вопрос по UPDATE
|
|||
---|---|---|---|
#18+
протестировала на время-выполнения свой поправленный вариант и предложенные на ~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 значения! :( ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2013, 13:44 |
|
Вопрос по UPDATE
|
|||
---|---|---|---|
#18+
ЛюдмilaWHERE >>>Id<<<=Temp.Id Людмilaесли подзапрос Select вернёт более 1 значенияу вас id не уникален, что ли? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2013, 14:17 |
|
Вопрос по UPDATE
|
|||
---|---|---|---|
#18+
Уточняю. в таблице A_DMS поле Id не уникально ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2013, 14:54 |
|
Вопрос по UPDATE
|
|||
---|---|---|---|
#18+
Людмila, Код: sql 1.
Поскольку id не уникально, значит Вам всё равно что вернёт подзапрос ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2013, 19:04 |
|
Вопрос по UPDATE
|
|||
---|---|---|---|
#18+
Людмila?Seconds()-nSec && получалось всегда 0 По существу уже написали. Хочу методику замера прокомментировать: она будет правильная, если предварительно эту же табличку открыть по сетке с другого компа. Локально - это замер площади сферического коня в вакууме. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2013, 21:47 |
|
Вопрос по UPDATE
|
|||
---|---|---|---|
#18+
В моём случае действительно всё равно что вернет подзапрос, цель - наличие данного ID в таблице A_DMC. если бы цель была иной, то условие WHERE в подзапросе можно было бы развить, да и сам возврат. А по поводу методики замеров скорости выполнения, то хоть уверена, что программно тормозов.нет! Конечно все понимают, что по лакалке результаты будут другими. Да и локалка-локалке-рознь. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2013, 23:09 |
|
Вопрос по UPDATE
|
|||
---|---|---|---|
#18+
Да ещё запросы с ТОР 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 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2013, 23:22 |
|
Вопрос по UPDATE
|
|||
---|---|---|---|
#18+
Людмilaвыдаёт ошибку - просит добавить ORDER BY (ну зачем он нужен там?)"шоб було"(с) Ну поставьте ему ордербай, раз просит. Жалко, что ли? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2013, 12:12 |
|
Вопрос по UPDATE
|
|||
---|---|---|---|
#18+
Ну ставлю, пусть подавиться. но зачем ему ORDER BY для одной записи? (вопрос риторический) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2013, 14:30 |
|
Вопрос по UPDATE
|
|||
---|---|---|---|
#18+
ЛюдмilaНу ставлю, пусть подавиться. но зачем ему ORDER BY для одной записи? (вопрос риторический) Order By - упорядочивает записи в полученном множестве... А множество, вот парадокс, не перестает оставаться множеством, даже если оно пустое... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2013, 15:01 |
|
|
start [/forum/topic.php?fid=41&msg=38353710&tid=1582953]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
34ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
others: | 277ms |
total: | 392ms |
0 / 0 |