前言
面试官:你知道mysql,with是怎么用的吗
面试者一脸懵逼说:with?。。这我不怎么了解过。
面试官:好的,那你等面试结果吧。
正文
With,大概的意思就是建一张临时表 给你当次的执行sql 去执行语句。
举个例子:
with tablea as ( select * from student )
Select * from tablea;
那这tablea拿到的结果就是student表拿到的结果,也就是括号内select * from student的结果。
那意思大家都懂了之后,什么场景可以去使用这种写法呢。
比如说大家经常使用的inner join 进行关联表,那有的时候,你关联的表是比较复杂的。
举个例子
Select * from student a
Inner join
Project b
On a.projectid =b.projectid
这是比较正常的语句,那如果project是一个比较复杂的情况,你不能仅仅去关联project去,要经过很多的筛选等等。那我们就可以用with的语法去写,这样子更加简单明了。
With projecttable as
(Select max_by(projectid,time) projectid,
min_by(projectname,time) projectname
from project
Where time >=2023-01-01
group by project group )
-- 假设就是这种复杂奇葩的逻辑的sql
Select * from student a
Inner join
projecttable b
On a.projectid =b.projectid
那这样子就很简单清晰,如果想改projecttable ,那就直接去改with语句中的sql就可以了。如果你的逻辑很简单,那就不用写with,写with 可以应对一些比较复杂的情况,避免你直接写在sql里面,会非常的不直观,难以维护。