0

我意识到我在查询中使用 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);
4

3 回答 3

2

尝试:

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

看看这里的更新参考。

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

update voterfile_household h inner join voterfile_precienct p on (h.Precnum = p.PREC_id)
   set h.PrecID = p.ID
于 2009-04-23T02:01:12.100 回答
0

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

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

我还认为这几乎与今天早些时候的这个问题(“我可以在 SQL UPDATE 内有一个内部 SELECT 吗?”)重复。

于 2009-04-23T02:00:14.007 回答
0

首先,你在 varchar 上的索引并不总是一件坏事,如果它不是一个键,你可以缩小你索引的字段的多少,只索引前 10 个字符左右。

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

于 2009-04-23T02:03:05.527 回答