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查询两个查询
1274浏览 • 1回复 待解决
关于数据库两个问题。
639浏览 • 1回复 待解决
页面导航如何实现两个页面叠层
247浏览 • 1回复 待解决
请教一个sql查询需求?
932浏览 • 1回复 待解决
SQL语句能不能用一个SQL搞定?
1154浏览 • 1回复 待解决
PolarDB 默认有哪两个可用表空间?
934浏览 • 1回复 待解决
有谁知道如何合并两个对象
189浏览 • 1回复 待解决
sql 联合查询 分表问题有懂吗?
385浏览 • 1回复 待解决
sql like查询如何不区分大小写?
1477浏览 • 2回复 待解决
两个设备控制相关问题
7372浏览 • 3回复 已解决
mysql多对多查询sql怎么写?
579浏览 • 1回复 待解决
ArkTS开发如何比较两个string是否一致 ?
2850浏览 • 3回复 待解决
字体库文件如何复用
1798浏览 • 1回复 待解决