SQL相同的两个子查询如何复用?

select sc.col1, sc.col2 
    from 
    **(select col1,col from t1)** sc 
            where sc.col1 = (select max(col)
            from 
                **(select col1,col from t1)**);

例如上面这种情况,在sql语句中出现两个一模一样的查询语句,在实际执行的时候会执行两次。

当然可以先将要复用的先查出来弄成临时表可以解决,但是如何用一条SQL语句来达到复用的效果,让查询优化器自动复用呢?

SQL
mysql
mariadb
2023-05-26 13:01:03
浏览
收藏 0
回答 2
待解决
回答 2
按赞同
/
按时间
卐卐狼卍卐

postgresql  实现方式

with tmp_q as (

   select col1,col from t1

)

select sc.col1, sc.col2  

   from tmp_q sc  

           where sc.col1 = (select max(col) from tmp_q);


分享
微博
QQ
微信
回复
2023-05-26 14:58:53
pgdba

​WITH 子句​

​WITH​子句允许你指定一个或者多个在主查询中可以 其名称引用的子查询。在主查询期间子查询实际扮演了临时表或者视图 的角色。每一个子查询都可以是一个​SELECT​、 ​TABLE​​VALUES​、 ​INSERT​、 ​UPDATE​或者 ​DELETE​语句。在​WITH​中书写 一个数据修改语句(​INSERT​、 ​UPDATE​或者 ​DELETE​)时,通常要包括一个 ​RETURNING​子句。构成被主查询读取的临时表的是 ​RETURNING​的输出,而不是该语句修改的 底层表。如果省略​RETURNING​,该语句仍会被执行,但是它 不会产生输出,因此它不能作为一个表从主查询引用。

分享
微博
QQ
微信
回复
2023-05-27 11:52:38
相关问题
关于SQL查询两个查询
2926浏览 • 1回复 待解决
sql like查询如何不区分大小写?
3350浏览 • 2回复 待解决
请教一个sql查询需求?
2580浏览 • 1回复 待解决
HarmonyOS 如何比较两个日期大小?
319浏览 • 1回复 待解决
SQL语句能不能用一个SQL搞定?
2850浏览 • 1回复 待解决
mysql多对多查询sql怎么写?
2152浏览 • 1回复 待解决
sql 联合查询 分表问题有懂吗?
1982浏览 • 1回复 待解决
HarmonyOS 如何合并两个对象
54浏览 • 1回复 待解决
HarmonyOS 两个网页间数据如何同步
20浏览 • 1回复 待解决
HarmonyOS 关于两个权限区别
24浏览 • 1回复 待解决
两个重叠组件如何实现事件透传
648浏览 • 1回复 待解决
HarmonyOS 两个同级组件问题
434浏览 • 1回复 待解决
关于Image组件两个问题
429浏览 • 1回复 待解决
关于数据库两个问题。
2384浏览 • 1回复 待解决