0

このクエリの結果は毎回異なります。

update product_models
  set category_id = (select id from categories order by RAND() limit 1)

繰り返し異なるカウント: 884 レコードが影響を受けました
878 レコードが影響を受けました
877 レコードが影響を受けました
892 レコードが影響を受けました
893 レコードが影響を受けました
883 レコードが影響を受けました
885 レコードが影響を受けました) 影響を受けた

どうして?

追加情報


カテゴリでは
、製品モデルに 22 行 -
製品に 900 行 - 600
サブクエリには条件も結合もなく、常に単一の行が返されます。
メインクエリにも条件や結合がないため、固定数を返す必要があります。

したがって、すべての実行で 900 個の製品モデルが返され、各 pm がサブクエリによって更新される必要があります。

4

3 に答える 3

1

ランダム関数を使用してcategoryIdを取得していて、それが他のcategoryIdを返すたびに、なぜ理解できなかったのか理解できません。

説明::

このサブクエリを実行するたびに:

 `select id from categories order by RAND() limit 1`

新しい Id が生成されます。Category1最初の実行時Category2、2 番目の実行時などで取得するとします。

したがって、実行するたびに更新は次のようになります::

First Run  :: update product_models  set category_id = Category1  
Second Run :: update product_models  set category_id = Category2
Third Run  :: update product_models  set category_id = Category3

テーブル内の行数はproduct_modelsカテゴリごとに異なるため、更新される行数は実行ごとに異なります。理由を理解していただければ幸いです。ご不明な点がございましたらお気軽にお尋ねください。

于 2013-02-04T18:12:34.340 に答える
1

クエリを実行するたびにデータが同一で​​あると仮定すると、affectedデータが変化しないかのように行がカウントされないことが原因です。その5ため、ランダム ID として が選択されている5場合、category_id に既に含まれている行はカウントされません。

于 2013-02-04T18:14:15.980 に答える
0

カテゴリを並べ替えていますが、各カテゴリには異なる数の製品が関連付けられています。または、テーブルが変更されています。

于 2013-02-04T18:14:41.473 に答える