Пакетное обновление MySQL - PullRequest
5 голосов
/ 01 июня 2011

У меня есть 2 таблицы (MySQL)

  1. data_details
  2. accounts_invoices

В идеале каждый data_details должен иметь идентификатор account_invoices id.(data_details имеет внешний ключ с первичным ключом account_invoices)

По какой-то причине существуют записи data_details, в которых нет аккаунта account_invoice_id, в таблице accounts_invoices

Поэтому я попытался обновить эти записи data_details с помощьюизвестный идентификатор account_invoice.это то, что я сделал

update data_details 
set account_invoice_id = 1
where account_invoice_id in (
  select d.id
  from data_details d left join accounts_invoices a
  on d.account_invoice_id = a.id
  where a.id is null    
)

Но происходит ошибка, говорящая

Вы можете указать целевую таблицу 'data_details' для обновления в предложении FROM (ошибка 1093)

может кто-топомогите мне, спасибо заранее

ура

Самера

1 Ответ

4 голосов
/ 01 июня 2011

Теперь это может быть диким предположением, но я думаю, что проблема в том, что вы обновляете ту же таблицу, которую запрашиваете.Я думаю, что в качестве обходного пути можно использовать временную таблицу, например:

update data_details 
set account_invoice_id = 1
where account_invoice_id in (
select * from (
  select d.id
  from data_details d left join accounts_invoices a
  on d.account_invoice_id = a.id
  where a.id is null    
) as t
)

Не пробовал, хотя, возможно, все неправильно.


Обновлен SQL , чтобы исправить мою ошибку, замеченную в комментариях.

update data_details 
set account_invoice_id = 1
where id in (
select * from (
  select d.id
  from data_details d left join accounts_invoices a
  on d.account_invoice_id = a.id
  where a.id is null    
) as t
)
...