0 Вопрос: Обновление запроса - как исправить сообщение об ошибке «Операция должна использовать обновляемый запрос»

вопрос создан в Thu, May 2, 2019 12:00 AM

У меня есть следующий запрос ОБНОВИТЬ:

UPDATE cl INNER JOIN bb ON cl.r_si = bb.si

SET cl.s_si = (SELECT si FROM bb AS y
    WHERE y.si = bb.si+1
    AND 
    (y.p >=bb.p*(1+(bb.imax+y.dmax-((bb.imax-bb.dmax)-((bb.iminn+bb.dminn)-bb.rminn)))/100)
    OR
    y.p<=bb.p*(1+(bb.imin+y.dmin+((bb.imax-bb.dmax)-((bb.iminn+bb.dminn)-bb.rminn)))/100)))

WHERE (((cl.s_si) is null));

Возвращает сообщение «Операция должна использовать обновляемый запрос»

Это тот же запрос, который сформулирован как SELECT вместо UPDATE:

SELECT

(SELECT si FROM bb AS y
    WHERE y.si = bb.si+1
    AND (y.p>=bb.p*(1+(bb.imax+y.dmax-((bb.imax-bb.dmax)-((bb.iminn+bb.dminn)-bb.rminn)))/100)
    OR
    y.p<=bb.p*(1+(bb.imin+y.dmin+((bb.imax-bb.dmax)-((bb.iminn+bb.dminn)-bb.rminn)))/100))) AS s_si

FROM cl INNER JOIN bb ON cl.r_si = bb.si;

Запрос работает в формулировке SELECT. Что я должен изменить в запросе UPDATE, чтобы избежать этого сообщения об ошибке? Необходимо обновить таблицу cl, а не создавать новую.

    
0
  1. Убедитесь, что хотя бы один из столбцов, используемых в соединении (cl.r_si или bb.si), имеет уникальный индекс
    2019-05-02 15: 17: 56Z
  2. Оба этих столбца имеют уникальные индексы.
    2019-05-02 23: 16: 30Z
  3. cl и bb - это обе таблицы? если bb - это запрос с агрегацией (я вижу столбцы dmin и dmax), то запрос не будет обновляться. Попробуйте заменить их функциями DMin и DMax
    2019-05-03 02: 06: 23Z
  4. Нет, агрегации нет. Имена этих столбцов совпадают с этими функциями по совпадению.
    2019-05-06 19: 21: 59Z
  5. Попробуйте проверить свой запрос, используя этот ответ stackoverflow.com/a/24269023 /5339178
    2019-05-07 04: 28: 32Z
0 ответов                              0                         
источник размещен Вот