昨天我有一个问题是关于用rand()命令mysql查询。我在这里得到了一个很好的答案:https://stackoverflow.com/a/16597706/2333744
答案的代码如下。
create temporary table results as
(Select *, @rn := @rn + 1 as rn, rand() as therand
from table1 inner join
table2
on table1.in = table2.in cross join
(select @rn := 0) const
where table1.T = A
);
select *
from results
where therand < 1000/@rn
order by therand
limit 500;
我理解除了之外的一切
cross join (select @rn : = 0) const
我不确定这是做什么的,如果重要的话。当我删除它时,我没有改变性能。任何人都能理解这部分吗?
坦率地说,所有这一切都是为了重置@rn变量。被“打包”成一个选择,以避免运行2个查询。 const意味着它是常量,因此只评估一次。
删除它并在单个事务中添加更多查询时,可能会遇到麻烦。
最好的祝福
索尔特
在这种情况下使用的User-Defined Variable @rn
仅用于制作序列号列,如上一个问题的the answer中所解释的那样。
const
在这里不被用作关键词...所以不要被那个'const
-fused'。它只是(select @rn := 0)
的一个名字......它可能是任何其他名称,如A
,B
,oops
,aah
,etc
......(见下面的第二个链接)
请参阅以下链接中的示例使用以更好地了解qazxsw poi: