gpt4 book ai didi

MySQL 查询边缘案例 - 当只有一种数据类型时行号失败

转载 作者:行者123 更新时间:2023-11-30 00:17:05 24 4
gpt4 key购买 nike

这是我的查询:

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 的不同值的数量大于 1 时,它可以正常工作。我可以在表中包含数千行,但如果所有行都具有相同的 Column3 值,则此查询不会返回任何内容。

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

一些背景知识(如果有帮助的话):如果我设置它,Column3 将是一个外键。因此,查询的目标是将数据分布在 Column3 上 - 只要返回的总行数小于 1000,就获取尽可能多的不同的 8 组(在生产中,这些数据都会随着每个查询而变化,据我所知,它有效,除了这种情况)。

编辑:我已经部分弄清楚了。它与我利用的 MySQL 特定功能有关,该功能比二次 row_number() 快得多。

select @num := if(@group = Column3, @num + 1, 1) as row_number,
@group := Column3 from runTimeURLStorage;

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

set @num  = 1;

“设置@num = 1;”当 Column3 有多个值时,会在后台调用。我可能只是需要调用“set @num = 1;”在同一连接上...

最佳答案

我必须调用:

set @num  = 1;

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

关于MySQL 查询边缘案例 - 当只有一种数据类型时行号失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23569565/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com