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第二次等等。

所以现在每次运行你的更新都会变成::

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 回答