无法理解mysql查询

问题描述 投票:1回答:2

昨天我有一个问题是关于用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

我不确定这是做什么的,如果重要的话。当我删除它时,我没有改变性能。任何人都能理解这部分吗?

mysql optimization
2个回答
0
投票

坦率地说,所有这一切都是为了重置@rn变量。被“打包”成一个选择,以避免运行2个查询。 const意味着它是常量,因此只评估一次。

删除它并在单个事务中添加更多查询时,可能会遇到麻烦。

最好的祝福

索尔特


1
投票

在这种情况下使用的User-Defined Variable @rn仅用于制作序列号列,如上一个问题的the answer中所解释的那样。

const在这里不被用作关键词...所以不要被那个'const-fused'。它只是(select @rn := 0)的一个名字......它可能是任何其他名称,如ABoopsaahetc ......(见下面的第二个链接)

请参阅以下链接中的示例使用以更好地了解qazxsw poi:

  • User-Defined Variables
  • Create a Cumulative Sum Column in MySQL
  • © www.soinside.com 2019 - 2024. All rights reserved.