Запрос SQL для обновления значения из других значений таблицы для N записей - PullRequest
0 голосов
/ 09 мая 2018

У меня неправильные записи в числовом столбце таблицы истории, поэтому мне нужно взять значение числового столбца из таблицы motorvehicle и обновить в таблице истории. Следующий запрос, который я использую для обновления,

UPDATE history
   SET history.number = (SELECT motorvehicle.number
                                   FROM motorvehicle
                                   WHERE motorvehicle.FK_ID = history.FK_ID
                                   AND   history.DATE = '2018-05-08'
                                   AND   history.state = 35 fetch first 1000 rows only)

Когда я запускаю этот запрос, я получаю сообщение об ошибке типа «[21000] [IBM] [DB2 / AIX64] SQL0811N: Результат скалярной полной выборки, оператора SELECT INTO или оператора VALUES INTO состоит из более чем одного строка».

Если я удаляю выборку первых 1000 строк только из запроса, это не дает никакой синтаксической ошибки, но происходит сбой из-за переполнения журнала транзакций.

Моя БД - Db2-LUW V10.5 и работает на сервере Linux.

Может кто-нибудь помочь мне решить эту проблему? Если приведенный выше запрос не является правильным способом обновления, можете ли вы предложить новый запрос, основанный на моей ситуации?

1 Ответ

0 голосов
/ 09 мая 2018

Я столкнулся с той же проблемой с Oracle и разработчиком SQL, поскольку подзапрос возвращает более одной записи для истории.Пример: для идентификатора 1 в истории ровно 1 совпадение, поэтому оно работало нормально, но для идентификатора 2500 запрос соответствовал нескольким записям, которые выдают исключение в середине пути.Чтобы разобраться в этом, мне нужно было добавить дополнительные условия спецификации и rownum = 1 в подзапросе.

В вашем случае выберите только первые 1000 строк: это должно быть 1.

...