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

时间:2024-06-21 18:00:23

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

场景

创建表test和视图v后,子查询中使用排序查询表test,出现查询结果不一致。
1
2
3
4
5
6
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
 9
10
11
12
13
14
15
16
17
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