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

Mysql 同一查询每次返回的记录数不同,mysql,count,records,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 子查询没有条件,没有联接,总是返回一行

每次查询的结果都不同:

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都应该通过子查询进行更新

我不明白为什么您不能理解,因为您使用的是随机函数来获取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
由于不同类别的表
产品\u模型中的行数不同,因此每次运行时更新的行数不同。
希望你明白原因。

如果您有任何疑问,请随时询问。

假设每次运行查询时,数据都是相同的,原因是如果数据没有更改,行不会被计算为受影响的
。因此,如果选择
5
作为随机ID,则不计算已经为类别ID设置了
5
的行。

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

这与此无关,但“主”查询始终是相同的。相同数量的记录。它只是由兰德选择的更新值,并且仅限于一个。那么,两者之间的关系是什么呢?整个概念对你来说很模糊,给我五分钟时间,这样我就可以更新我的答案,这很容易理解。。我会试着用一个例子来解释,我们当中有一个人遗漏了什么。我将尝试在问题中添加一些数据还有一件事,请从表product_models中列出几个类别计数