Mariadb 根据顺序,使用比较运算符选择,跳过行
我有一个来自Mariadb 根据顺序,使用比较运算符选择,跳过行,mariadb,sql-order-by,Mariadb,Sql Order By,我有一个来自SELECT查询的结果集,它基于某个orderby条件,我试图检查结果集呈现顺序的完整性。首先,我指定了一个限制,在此基础上,结果集大小是有限的。然后,我从结果集中选择一个随机的PK值,获得一个特定的行,并对该行值使用比较运算符,用于下一个SELECT。类似这样的情况(假设a是上面的随机行): 基本上,我在这里试图做的是,确保对于特定顺序的结果集(R),当选择一个随机的PK值,并对基于PK的行值发出带有比较运算符的SELECT语句时,结果集(s)包含R中PK之后/之前的行,具体取决于
SELECT
查询的结果集,它基于某个orderby
条件,我试图检查结果集呈现顺序的完整性。首先,我指定了一个限制
,在此基础上,结果集大小是有限的。然后,我从结果集中选择一个随机的PK
值,获得一个特定的行,并对该行值使用比较运算符,用于下一个SELECT
。类似这样的情况(假设a是上面的随机行):
基本上,我在这里试图做的是,确保对于特定顺序的结果集(R),当选择一个随机的PK值,并对基于PK的行值发出带有比较运算符的SELECT
语句时,结果集(s)包含R中PK之后/之前的行,具体取决于顺序是升序还是降序
它基本上可以工作,除了少数情况下,基于PK的行之后的下一行在几个列中具有与基于PK的行相同的值。例如,这些是resultset R中的最后几行:
ID(varchar) VALUE(varchar) DESC1(text) DESC2(text) NAME(text)
------------- ------------- ------------- ------------- -------------
62E212AF C09A F/T/K AH AN
CAFFA217 C09AA F/T/K 2 Ah An
D90222CC C09BA F/T/K 2d Ahod Anod
现在,如果我尝试在ID62E212AF
之后获取新的结果集,它将跳过IDCAFFA217
,结果集中的第一个ID是D90222CC
。类似的模式也在其他一些地方重复。在这种情况下,我是这样下订单的:
order by
NAME asc,
VALUE asc,
DESC1 asc,
DESC2 asc,
ID asc
我真的很感激你能帮我
a.X > b.X AND a.Y > b.Y
未正确检查两件式订购。相反:
a.X > b.X OR (a.X = b.X AND a.Y > b.Y)
或者:
a.X >= b.X AND (a.X > b.X OR a.Y > b.Y)
“行构造函数”也可以工作,但可能无法很好地优化:
(a.X, a.Y) > (b.X, b.Y)
orderby
做的是“正确的事情”。如何以不同的排序顺序对多个字段进行比较?例如,X ASC
、Y DESC
、Z DESC
和W ASC
@RoshanUpreti-混合方向(ASC&DESC)可能是“错误的”。超过两项会变得相当混乱,但这是可能的。(我没有这样做的经验。)如果性能不是问题,只需使用行构造函数即可。
(a.X, a.Y) > (b.X, b.Y)