0

テーブルの列を更新する必要があります。更新値は別のテーブルから取得する必要があります。私が行ったクエリはステートメントです:

update db1.t1 set location=(select countryName from db1.t1, db2.t2 where t1.num 
between t2.beginNum AND t2.endNum limit 1)

次のエラーが発生します。

Error Code: 1093 You can't specify target table t1 for update in FROM clause.

次に、句t1からテーブル名を削除するとFROM

update db1.t1 set location=(select countryName from db2.t2 where num 
between t2.beginNum AND t2.endNum limit 1)

クエリは機能しましたが、正しく機能したかどうかはわかりません。私の知る限り、FROM複数のテーブルから取得する場合は、句で両方のテーブルを指定する必要があります。私が作業している2つのテーブルには、共通の列がありません。ただし、t1の2つの値の間にある値がありますt2。2番目のクエリは絶対に正しいですか?クエリは、句numの後に最初のテーブルからのものであることをどのように認識しますか?where間違った値を取得するのではないかと心配しています。

4

1 に答える 1

0

2 つのクエリは異なる処理を行います。

t2.CountryName1 つ目は、t1 の各位置に任意の を割り当てようとしています。条件に一致するものがある可能性があるため、NULL 値を割り当てることはありませんt1.numt1.num条件を満たさないときbetween。最初のクエリのへの 2 つの参照db1.t1は異なる参照であるためcross join、テーブル間に暗黙的な参照があります。

2 つ目は、行の値が条件を満たすt2.CountryName場所に任意の場所を割り当てることです。num他の行には、NULL が割り当てられます。

私の推測では、2 番目のクエリは本当にやりたいことです。

于 2013-02-07T14:42:45.473 に答える