Обновление MySQL с двумя подзапросами - PullRequest
0 голосов
/ 15 июня 2010

Я пытаюсь обновить один столбец таблицы MySQL с помощью подзапроса, который возвращает дату, и другой подзапрос для предложения WHERE.

Вот оно:

UPDATE wtk_recur_subs_temp 
   SET wtk_recur_date = (SELECT final_bb.date
                           FROM final_bb, wtk_recur_subs 
                          WHERE final_bb.msisdn = wtk_recur_subs.wtk_recur_msisdn) 
WHERE wtk_recur_subs_temp.wtk_recur_msisdn IN (select final_bb.msisdn 
                                                 from final_bb)

Ответиз движка MySQL: «Подзапрос возвращает более 1 строки».

Ответы [ 2 ]

1 голос
/ 15 июня 2010

Это может стать для вас полным шоком, но один из ваших подзапросов возвращает более одного ряда!

Это не разрешено в тех обстоятельствах, которые вы создали.Каждый из этих двух подзапросов должен возвращать одну и только одну строку.Или нет строк.

Выполните каждый подзапрос самостоятельно и определите, какой из них возвращает более одной строки.Если они не должны возвращать более одной строки, ваши данные могут быть неверными.Если они должны возвращать более одной строки, вы либо захотите изменить данные, чтобы они этого не сделали (как я полагаю, вы ожидаете), либо добавьте предложение LIMIT.Или добавьте статистическую функцию (например, MAX) вне запроса, чтобы сделать что-то правильное с возвращаемыми несколькими строками.

1 голос
/ 15 июня 2010

Использование:

UPDATE wtk_recur_subs_temp,
       final_bb, 
       wtk_recur_subs 
   SET wtk_recur_subs_temp.wtk_recur_date = final_bb.date
 WHERE final_bb.msisdn = wtk_recur_subs.wtk_recur_msisdn
   AND wtk_recur_subs_temp.wtk_recur_msisdn = final_bb.msisdn

Ошибка в том, что:

SET wtk_recur_date = (SELECT final_bb.date
                        FROM final_bb, wtk_recur_subs 
                       WHERE final_bb.msisdn = wtk_recur_subs.wtk_recur_msisdn) 

... значение final_bb.date - это все значения даты, в которых совпадают значения столбцов final_bb и wtk_recur_subs msisdn.

...