同一查询每次返回不同数量的记录

时间:2013-02-04 18:09:03

标签: mysql count records

此查询结果每次都不同:

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个产品模型,每个p.m应该由子查询更新

3 个答案:

答案 0 :(得分: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中的行数对于不同的类别是不同的,因此每次运行时更新的行数都不同。 希望你明白原因。 如果您有任何疑问,请随时询问。

答案 1 :(得分:1)

假设每次运行查询时数据都相同,原因是如果数据没有更改,行不会计为affected。因此,如果选择5作为随机ID,则不计算已为category_id 5的行。

答案 2 :(得分:0)

您正在对类别进行排序,并且每个类别都有不同数量的相关产品。或者表格正在改变。