2009-04-23 16 views
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); 
+0

私は、誤った表記でテーブルを操作しなければならないと、私の脳が溶けてしまうと思います。これが何らかの方言だと教えてください。 – nickf

+0

私は気づいていなかった、私は間違って綴られたと思うし、私は初めてそれを入力した参照してください。 – gsueagle2008

答えて

2

試してみてください。

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

が更新参照hereを見てみましょう。

同様に、内部結合の構文も使用できます。それはあなたが唯一のインデックスにインデックスが最初の10文字かそこらを言うフィールドのどのくらいを縮小することができますキーがない場合は

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

サブクエリが複数の結果を返す場合はどうなりますか?それがうまくいかない理由です。

SQL Serverでは、サブクエリに「制限1」を追加すると、サブクエリが「SELECT TOP 1 ...」を実行しても問題なく動作します。

また、これは今日(米国時間)よりもかなり多くの複製であると思われます(this question ("Can I have an inner SELECT inside of an SQL UPDATE?"))。

0

まず、varchar型の索引は、常に悪いことではありません。

第2に、返されたセットであるかのようにこれを行うことはできません。

+0

私は、varcharはPK – gsueagle2008

関連する問題