数据仓库服务 GaussDB(DWS)-GaussDB(DWS)查询时结果不一致的常见场景和解决方法:子视图/子查询中使用排序

时间:2025-02-12 15:02:21

子视图/子查询中使用排序

场景

创建表test和视图v后,子查询中使用排序查询表test,出现查询结果不一致。
123456
CREATE TABLE test(a serial ,b int);INSERT INTO test(b) VALUES(1);INSERT INTO test(b) SELECT b FROM test;INSERT INTO test(b) SELECT b FROM test;CREATE VIEW v as SELECT * FROM test ORDER BY a;

问题SQL:

 1 2 3 4 5 6 7 8 91011121314151617
SELECT * FROM v limit 1; a | b---+--- 3 | 1(1 row)SELECT * FROM (select * from test order by a) limit 10; a  | b----+--- 14 | 1(1 row)SELECT * FROM test order by a limit 10; a | b---+--- 1 | 1(1 row)

原因分析

对于子视图和子查询中order by是无效的。

解决方法:

不建议在子视图和子查询中使用order by,若要保证结果有序,需在最外层查询中使用order by。

support.huaweicloud.com/dws_faq/dws_03_2107.html