0

クエリのインデックス/キーとしてvarchar属性を使用していることに気付きました。これにより、クエリのパフォーマンスが低下します。正確なテーブルを調べて整数IDを取得し、新しい列に配置された新しいintFKで世帯テーブルのレコードを更新しようとしています。これは私がこれまでに書いたSQLです。しかし、私は

エラー1093FROM句で更新するターゲットテーブル'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 ...」を実行すると、このタイプの機能を動作させることができます。サブクエリに「limit 1」を追加した場合、mysqlもそれを受け入れるかどうかはわかりません。

また、これは、今日の以前のこの質問(「SQLUPDATE内に内部SELECTを含めることはできますか?」)とほぼ同じだと思います。

于 2009-04-23T02:00:14.007 に答える
0

まず、varcharのインデックスは必ずしも悪いことではありません。キーでない場合は、インデックスを作成するフィールドの量を縮小して、最初の10文字程度のインデックスのみにすることができます。

第二に、それが壊れてしまう可能性のある返されるセットであるかのように、これを行うことはできません。

于 2009-04-23T02:03:05.527 に答える