在两个表中使用子选择优化查询
Posted
技术标签:
【中文标题】在两个表中使用子选择优化查询【英文标题】:Optimizing query with subselect in two tables 【发布时间】:2021-04-09 06:54:58 【问题描述】:表employee
有两列:
表external_job
也有两列:
我必须找一个拿到最高薪水的人。 结果必须是三列一行:
ID 姓名 薪水我进行了查询,但客户要求我不要使用子选择查询。
在这种情况下我该怎么办?
我的查询是:
select *
from (select a.id,
a.name,
(select sum(salary)
from external_job b
where b.id = a.id) salary
from employee a
order by salary desc)
where rownum = 1
【问题讨论】:
后端显示前端,是指浏览器会先请求go api server,然后将请求转发到next.js server,再发送response给浏览器? 用您正在使用的数据库标记您的问题。 【参考方案1】:使用order by
和一些将结果限制为一行的方法。在标准 SQL 中,这是:
select ej.id, e.name, ej.salary
from employee e join
external_job ej
on ej.id = e.id
order by ej.salary
fetch first 1 row only;
并非所有数据库都支持fetch first
。有些人使用limit
或select top
甚至更神秘的构造。
【讨论】:
【参考方案2】:假设ID是双方的主键。
select ID, NAME, SALARY from employee e , external_job a where e.id= a.id
order by salary desc
limit 1
【讨论】:
以上是关于在两个表中使用子选择优化查询的主要内容,如果未能解决你的问题,请参考以下文章
clickhouse,数据查询与写入优化,分布式子查询优化,外部聚合/排序优化,基于JOIN引擎的优化,SQL优化案例,物化视图提速,查询优化常用经验法则,选择和主键不一样的排序键,数据入库优化(代码