从另一个表更新表中的值

时间:2009-04-23 01:54:29

标签: mysql sql mysql-error-1093

我意识到我在查询中使用varchar属性作为索引/键,这会破坏我的查询性能。我试图查看我的precienct表并获取整数ID,然后使用新的int FK更新我的家庭表中的记录,放在一个新列中。这是我到目前为止写的sql。但我得到了一个

错误1093您无法在FROM子句中为更新指定目标表'voterfile_household',我不知道如何解决它。

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 个答案:

答案 0 :(得分:2)

尝试:

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

查看更新参考here

同样,您也可以使用内部联接语法。

update voterfile_household h inner join voterfile_precienct p on (h.Precnum = p.PREC_id)
   set h.PrecID = p.ID

答案 1 :(得分:0)

如果子查询返回多个结果怎么办?这就是为什么它不起作用。

在SQL Server上,如果子查询执行“SELECT TOP 1 ...”,则可以使用此类型的东西,如果向子查询添加“限制1”,则不确定mysql是否也会接受它。

我也认为这与今天早些时候的this question ("Can I have an inner SELECT inside of an SQL UPDATE?")几乎相同。

答案 2 :(得分:0)

首先,你对varchar的索引并不总是坏事,如果它不是一个键,你可以缩小你索引的字段的数量,只有索引说前十个字符左右。

其次,它不会让你这样做,好像它是一个它可能会破坏的集合。