Sedge писал(а):UPDATE ... INNER JOIN - это как?
UPDATE <table> SET <field>=<field> FROM <table> INNER JOIN <table> ON <etc>
GSerg писал(а):Собственно, всё правильно...
Если запрос содержит вычисляемые поля, то он необновляемый. Обновляемый содержит прямые поля из базы.
А у тебя функция Abs
UPDATE Deals_TMP SET NKD_on_date = ...
FROM ...
WHERE ...
Andrey Fedorov писал(а):Вообще-то при задании вопроса надо бы более-менее правильно его писать, например в данном вопросе нормально сформатировать текст запроса, чтобы его было удобно читать - вглядываться и расшифровывать текст идущий сплошняком совершенно нехочется...
В данном случае можно было бы еще приложить архивчик с базой содержащей две маленькие таблички и запрос - чтобы попробовать и проверить могли.
Вообще-же подобный запрос построить можно, только выглядеть он должен примерно так:
- Код: Выделить всё
UPDATE Deals_TMP SET NKD_on_date = ...
FROM ...
WHERE ...
Т.е нужно привести к такому синтаксису.
alex shestov писал(а):Интересно, можно ли обойтись без создания временной таблицы или в данном случае только так? Потому что без функции Abs он все равно не обновляет, т.к. там вычитание происходит. Можно или нет?
alex shestov писал(а):Интересно, можно ли обойтись без создания временной таблицы
Andrey Fedorov писал(а):Значение вполне может вычисляться.
GSerg писал(а):Хочу. Хочу пример. Не видел, потому и хочу.
UPDATE Заказы
SET КоличествоЗаказов = КоличествоЗаказов * 1.1,
Доставка = Доставка * 1.03
WHERE СтранаПоставщик = 'Великобритания'
GSerg писал(а):Ты не понял
В качестве обновляемого объекта используется запрос, возвративший вычисленные поля.
Приведи пример обновления таких полей, потому что именно такая проблема стоит перед человеком
GSerg писал(а):Которая INNER JOIN с вычисляемым запросом
UPDATE Deals_TMP
SET Deals_TMP.NKD_on_date = Round(Round(((1000*(Deals_TMP![Cupon %]/100))*(NKD_DltDate!DltDate1/365)),2)*((NKD_DltDate!DltDate2/NKD_DltDate!DltDate1)),2)*NKD_DltDate!Nepogasheni_Nominal,
Deals_TMP.NKD = IIf(IsNull(NKD_DltDate!DltDate3),0,NKD_DltDate!Nepogasheni_Nominal*Round((Round((1000*((Deals_TMP![Cupon %]/100))*(NKD_DltDate!DltDate1)/365),2))*(NKD_DltDate!DltDate3/NKD_DltDate!DltDate1),2))
FROM Deals_TMP, NKD_DltDate
WHERE Deals_TMP.Number = NKD_DltDate.Number
AND Deals_TMP.Emitent = NKD_DltDate.Emitent
GSerg писал(а):Которая INNER JOIN с вычисляемым запросом
GSerg писал(а):NKD_DltDate - это и есть вычисляемый запрос
Sedge писал(а):GSerg писал(а):Которая INNER JOIN с вычисляемым запросом
Не, INNER JOIN с вычисляемым запросом - это NKD_DltDate... Она в правой части апдейта стоит.
Это такая извращенная логика, я так понял, чтобы Deals_TMP из самой себя проапдейтить...
GSerg писал(а):NKD_DltDate - это и есть вычисляемый запрос
Andrey Fedorov писал(а):GSerg писал(а):NKD_DltDate - это и есть вычисляемый запрос
Обновляется-то не он. А конкретная таблица.
Неужели мне пример лепить придется???
alibek писал(а):Если запрос переписать, описав соединения не в FROM, а в WHERE, то запрос должен сработать.
Andrey Fedorov писал(а):alibek писал(а):Если запрос переписать, описав соединения не в FROM, а в WHERE, то запрос должен сработать.
А, похоже тут не переписать - у Access-a инструкция UPDATE примитивна и не имеет FROM, так что облом...
Andrey Fedorov писал(а):Обновляется-то не он. А конкретная таблица.
Неужели мне пример лепить придется???
Andrey Fedorov писал(а):А, похоже тут не переписать - у Access-a инструкция UPDATE примитивна
IIf(IsNull(NKD_DltDate!DltDate3),0,NKD_DltDate!Nepogasheni_Nominal*Round((Round((1000*((Deals_TMP![Cupon %]/100))*(NKD_DltDate!DltDate1)/365),2))*(NKD_DltDate!DltDate3/NKD_DltDate!DltDate1),2))
FROM Deals_TMP, NKD_DltDate
WHERE Deals_TMP.Number = NKD_DltDate.Number
AND Deals_TMP.Emitent = NKD_DltDate.Emitent
Сейчас этот форум просматривают: Google-бот, SemrushBot и гости: 93