Обновить значение в таблице из другой таблицы - PullRequest
0 голосов
/ 23 апреля 2009

Я понял, что использую атрибут varchar в качестве индекса / ключа в запросе, и это снижает производительность моего запроса. Я пытаюсь заглянуть в свою предварительную таблицу и получить целочисленный идентификатор, а затем обновить свою запись в таблице домохозяйств новым int FK, помещенным в новый столбец. это sql я написал до сих пор. но я получаю

Ошибка 1093 Невозможно указать целевую таблицу 'voterfile_household' для обновления в предложении FROM, и я не уверен, как это исправить.

UPDATE voterfile_household
SET
PrecID = (SELECT voterfile_precienct.ID
        FROM voterfile_precienct INNER JOIN voterfile_household
        WHERE voterfile_precienct.PREC_ID = voterfile_household.Precnum);

Ответы [ 3 ]

2 голосов
/ 23 апреля 2009

Попробуйте:

update voterfile_household h, voterfile_precienct p
   set h.PrecID = p.ID
 where p.PREC_ID = h.Precnum

Взгляните на ссылку обновления здесь .

Аналогично, вы также можете использовать синтаксис inner join .

update voterfile_household h inner join voterfile_precienct p on (h.Precnum = p.PREC_id)
   set h.PrecID = p.ID
0 голосов
/ 23 апреля 2009

Во-первых, ваш индекс на varchar не всегда плох, если он не является ключом, вы можете уменьшить, какую часть поля вы индексируете, чтобы индексировать только первые 10 символов или около того.

Во-вторых, он не позволит вам сделать это так, как будто это набор, который возвращается, он может сломаться.

0 голосов
/ 23 апреля 2009

Что если подзапрос вернет более одного результата? Вот почему это не работает.

На SQL Server вы можете заставить этот тип вещей работать, если подзапрос выполнит «SELECT TOP 1 ...», но не уверен, что mysql также примет его, если вы добавите «ограничение 1» в подзапрос. *

Я также думаю, что это в значительной степени дубликат этого вопроса («Могу ли я иметь внутренний SELECT внутри SQL UPDATE?») с более раннего сегодняшнего дня.

...