代码之家  ›  专栏  ›  技术社区  ›  gsueagle2008

从另一个表更新表中的值

  •  0
  • gsueagle2008  · 技术社区  · 16 年前

    我意识到我在查询中使用了varchar属性作为索引/键,这会扼杀我的查询性能。我正在尝试在precienct表中查找并获取整数ID,然后用新的int fk更新我在household表中的记录,并将其放入新的列中。这是我迄今为止写的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 回复  |  直到 14 年前
        1
  •  2
  •   Pablo Santa Cruz    16 年前

    尝试:

    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
    
        2
  •  0
  •   Community CDub    8 年前

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

    在SQL Server上,如果子查询“select top 1…”,则可以使这种类型的东西工作,如果向子查询添加“limit 1”,则不确定MySQL是否也接受它。

    我也认为这是 this question ("Can I have an inner SELECT inside of an SQL UPDATE?") 从今天早些时候开始。

        3
  •  0
  •   lsl    16 年前

    首先,varchar上的索引并不总是一件糟糕的事情,如果它不是一个键,那么您可以将索引到的字段缩小到只有索引的程度,比如前10个字符左右。

    第二,它不会让你这样做,好像它是一个被返回的集合,它可能会打破。