Обновлять только последние включенные значения - PullRequest
0 голосов
/ 09 октября 2018

Мне нужно выполнить этот запрос UPDATE, но только в последних 121 значениях, включенных в таблицу.Это возможно?

Как я делаю:

UPDATE estrutura q
   SET q.id_horizonte = 
            (SELECT h.id_horizonte 
               FROM horizonte h 
              WHERE q.observacao = h.observacao 
                AND q.nome_horizonte = h.nome_horizonte)
 WHERE id_horizonte DESC 
 LIMIT 121

Ошибка, которую я получаю:

У вас ошибка в синтаксисе SQL;проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с 'DESC LIMIT 121' в строке 3

Ответы [ 3 ]

0 голосов
/ 09 октября 2018

Вы можете написать процедуру, в которой вы выбираете нужные записи, а затем просматриваете и обновляете их.Другим, но очень медленным и неэффективным способом было бы изменить выражение where на что-то вроде этого "... where in (subselect)".Подвыбор должен возвращать идентификаторы последних 121 записей, конечно, вам нужно будет отформатировать их в соответствии с правильным синтаксисом.Поэтому, если вы полностью полагаетесь на SQL, процедура, вероятно, будет самым простым способом достижения вашей цели.

0 голосов
/ 09 октября 2018

Это кажется , что вы пытаетесь обновить только первые 121 значение таблицы estrutura (порядок определяется в порядке убывания id_horizonte), используя значения из таблицы horizonte, используя отношения соединенияна observacao и nome_horizonte.Пожалуйста, исправьте меня, если моя интерпретация неверна.

Одной из проблем в вашем коде является то, что вы используете DESC с Where предложением.DESC может использоваться только с ORDER BY.

Еще одним улучшением может быть изменение вашего запроса на JOIN на основе вместо использования подзапроса, чтобы определить значение, которое нужно установить.

Попробуйте следующий запрос:

UPDATE estrutura AS q 
JOIN horizonte AS h 
  ON q.observacao = h.observacao AND 
     q.nome_horizonte = h.nome_horizonte 
SET q.id_horizonte = h.id_horizonte 
ORDER BY q.id_horizonte DESC 
LIMIT 121
0 голосов
/ 09 октября 2018

Измените предложение where следующим образом:

где id_horizonte in (выберите верхний 121 id_horizonte из порядка структуры по id_horizont desc)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...