如何让SQL查询生成的数字序列按正确顺序返回?
问题成因
SQL执行规则中,未显式添加ORDER BY子句的查询,数据库不会保证返回结果的行顺序。你通过两个数字集做笛卡尔积生成1-100连续序列的写法逻辑完全正确,结果乱序是数据库按照自身执行计划(例如联表读取顺序、内部数据存取路径)返回数据导致的,属于SQL的固有特性,并非语法错误。
修复方法
在查询末尾追加显式排序规则,指定按计算得到的数值升序返回即可,修正后的完整SQL如下:
SELECT ones.num + tens.num + 1 AS seq_num FROM (SELECT 0 num UNION ALL SELECT 1 num UNION ALL SELECT 2 num UNION ALL SELECT 3 num UNION ALL SELECT 4 num UNION ALL SELECT 5 num UNION ALL SELECT 6 num UNION ALL SELECT 7 num UNION ALL SELECT 8 num UNION ALL SELECT 9 num ) ones CROSS JOIN (SELECT 0 num UNION ALL SELECT 10 num UNION ALL SELECT 20 num UNION ALL SELECT 30 num UNION ALL SELECT 40 num UNION ALL SELECT 50 num UNION ALL SELECT 60 num UNION ALL SELECT 70 num UNION ALL SELECT 80 num UNION ALL SELECT 90 num ) tens ORDER BY seq_num ASC;
你也可以不给计算列设置别名,直接在ORDER BY后写计算表达式ones.num + tens.num + 1 ASC,最终返回效果完全一致,执行后结果会严格按照1到100的升序排列,不会再出现顺序错乱的问题。
内容的提问来源于stack exchange,提问作者youthful_bear
相关产品推荐
相关产品推荐

