我可以重写这个SQL查询来避免 "The ORDER BY子句无效"。

问题描述 投票:0回答:1

我的查询原本是这样的。

select a.ID, a.TransactionID, b.Result 
from MyDB.Result a inner join MyDB.ResultData b on a.ID=b.ID 
where a.ID < 100000 and a.CreatedOn > '2020-01-01' 
order by a.ID

但我在Elasticsearch JDBC输入中得到了错误的信息。

ORDER BY子句在视图、内联函数、派生表、子查询和普通表表达式中无效,除非同时指定了TOP、OFFSET或FOR XML。

为了解决这个问题,我把它重构成这样。

select TOP 500 a.ID, a.TransactionID, b.Result 
from MyDB.Result a inner join MyDB.ResultData b on a.ID=b.ID 
where a.ID < 100000 and a.CreatedOn > '2020-01-01' 
order by a.ID

有没有什么方法可以重写它,让它不需要输入TOP 500,而是让JDBC插件使用它的内置设置?

EDIT.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET:这是日志中的一部分 这看起来确实是作为一个更大的查询的一部分在运行。

(1.251403s) SELECT TOP (1) count(*) AS [COUNT] FROM (select TOP 500 a.ID, a.TransactionID, b.Result from MyDB.Result a inner join MyDB.ResultData b on a.ID=b.ResultID where a.ID < 100000 and a.CreatedOn > '2020-01-01' order by a.ID) AS [T1]
(8.845048s) SELECT * FROM (select TOP 500 a.ID, a.TransactionID, b.Result from MyDB.Result a inner join MyDB.ResultData b on a.ID=b.ResultID where a.ID < 100000 and a.CreatedOn > '2020-01-01' order by a.ID) AS [T1] ORDER BY 1 OFFSET 0 ROWS FETCH NEXT 500 ROWS ONLY
sql sql-server jdbc
1个回答
0
投票

当你使用TOP子句作为FROM时,需要使用ORDER BY。

子查询规则

ORDER BY只能在指定了TOP时才能指定。

阅读所有子查询规则

你可以做的是,你可以把ORDER BY移到FROM子句之外。我知道你想要的是所有的行,而不是只有500行。

(1.251403s) SELECT TOP (1) count(*) AS [COUNT] FROM (select a.ID,  
a.TransactionID, b.Result from MyDB.Result a inner join MyDB.ResultData b 
on a.ID=b.ResultID where a.ID < 100000 and a.CreatedOn > '2020-01-01') AS [T1]
order by ID 

(8.845048s) SELECT * FROM (select a.ID, a.TransactionID, b.Result from MyDB.Result a    
inner join MyDB.ResultData b on a.ID=b.ResultID where a.ID < 100000    
and a.CreatedOn > '2020-01-01' order by a.ID) AS [T1] ORDER BY ID 

-2
投票

你可以尝试用 order by a.ID offset 0 rows

© www.soinside.com 2019 - 2024. All rights reserved.