sql - 通过仅重用一次内部查询来优化查询
问题描述
考虑以下查询
SELECT
FlightDate,
FlightNum,
Origin,
Dest,
AirlineID
FROM
ontime1
WHERE
FlightDate >= (SELECT MIN(FlightDate) FROM ontime2 WHERE Origin='JFK') AND
FlightDate <= (SELECT MAX(FlightDate) FROM ontime2 WHERE Origin='JFK') AND
AirlineID IN (SELECT AirlineID FROM ontime2 WHERE Origin='JFK')
LIMIT 10;
ontime1 -> 基于 FlightDate
ontime2 -> 索引基于 Origin、Dest
加入表格也不是最佳的,因为表格数据太大了
如何在不一次又一次地重复相同查询的情况下重用内部查询?
解决方案
考虑使用WITH 子句:
WITH (
SELECT (MIN(FlightDate), MAX(FlightDate), groupUniqArray(AirlineID)) /* tuple with required aggregates */
FROM ontime2
WHERE Origin='JFK'
) AS cte
SELECT
FlightDate,
FlightNum,
Origin,
Dest,
AirlineID
FROM
ontime1
WHERE
FlightDate >= cte.1 AND
FlightDate <= cte.2 AND
has(cte.3, AirlineID)
LIMIT 10;
推荐阅读
- json - 从嵌套字典(或从 json 文件)中搜索并返回值
- wordpress - Wordpress 表单数据
- azure-web-app-service - 将 WEBSITES_ENABLE_APP_SERVICE_STORAGE 设置为 true 时删除 /home/site/wwwroot 上的内容
- ktor - 我想和 PHP 一样,但在 ktor 中
- html - 表格行在拖动时丢失样式
- html - 面临“request.POST.get()”方法的问题,它没有获取正确的数据
- javascript - django使用ajax调用后端有问题
- android - 如何使用 Volley 发送 base 64 字符串
- ios - SwiftUI:主从视图中的 SafariView
- java - 为什么当我在eclipse中的spring boot项目中执行主类时出现这个错误“找不到或加载主类”