2009-04-23 75 views
0

我意識到我在查詢中使用了varchar屬性作爲索引/鍵,而這正在消除我的查詢性能。我正在嘗試查看我的精度表並獲取整數ID,然後使用新的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); 
+0

我想我的大腦會融化,如果我不得不拼寫錯誤的表格。請告訴我這是一些方言或什麼。 – nickf 2009-04-23 01:59:34

+0

我甚至沒有注意到,我想我拼錯了一次,然後只是第一次輸入它的時候引用它。 – gsueagle2008 2009-04-23 02:41:36

回答

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 
0

如果子查詢返回多個結果會怎樣?這就是爲什麼它不起作用。

在SQL Server上,你可以得到這種類型的東西的工作,如果沒有子查詢「SELECT TOP 1 ...」,不知道如果MySQL也將接受它,如果你添加一個「上限1」的子查詢。

我也認爲這幾乎是從今天早些時候起的this question ("Can I have an inner SELECT inside of an SQL UPDATE?")的重複。

0

首先,你對一個varchar指數並不總是一件壞事,如果它不是一個鍵就可以縮小多少場你指數只指數說出的第10個字符左右。其次,它不會讓你這樣做,就好像它是一個返回它可能會破壞的集合。