首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当只有一种类型的数据时,MySQL查询边缘大小写行号失败

问当只有一种类型的数据时,MySQL查询边缘大小写行号失败
EN

Stack Overflow用户
提问于 2014-05-09 16:24:31
回答 1查看 46关注 0票数 0

以下是我的查询:

代码语言:javascript
复制
select id, Column2, Column3, ..., Column9, Column10, Column11
  from   (select id, Column2, Column3, ..., Column9, Column10, Column11,
        @num := if(@group = Column3, @num + 1, 1) as row_number,
        @group := Column3 as dummy from TABLE order by Column3) as x
  where
            row_number <= 8
            and Column9 = 'value1'
            and Column10 = 'value2'
  limit 1000 for update;

当Column3的不同值的数量大于一个时,它就能很好地工作。表中可以有数千行,但如果所有行都具有相同的Column3值,则此查询将不返回任何内容。

如果我随后添加了一个新行,其中Column3是不同的,那么它再次工作(下一次只会失败)。

如果有帮助的话,一些背景:如果我设置的话,Column3将是一个外键。因此,查询的目标是将数据分散到Column3上--只要返回的行总数小于1000 (在生产过程中,所有这些都随每个查询而变化,据我所知,除本例外),就抓取8种不同的组。

编辑:,我已经部分弄明白了。这与我所利用的MySQL特定特性相关,它比二次row_number()要快得多。

代码语言:javascript
复制
select @num := if(@group = Column3, @num + 1, 1) as row_number,
    @group := Column3 from runTimeURLStorage;

一遍又一遍地运行上面的查询,@num只会增加每次调用的数量,除非执行如下操作:

代码语言:javascript
复制
set @num  = 1;

当Column3有多个值时,'set @num = 1;‘将在外壳下调用。我可能会打个电话到'set @num = 1;‘在同一个连接上.

EN

回答 1

Stack Overflow用户

发布于 2014-05-09 18:05:20

我得打个电话给:

代码语言:javascript
复制
set @num  = 1;

在执行主查询之前,在同一连接上只有一个不同的Column3值,否则MySQL会缓存来自以前调用的@num的值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23569565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档