SQL 复用子查询 临时表 临时视图 with as

写sql中常常有些子查询需要复用,oracle中实现了with as 这个语法就非常方便,相当于建的临时表(具体的机制或者说和临时表的异同就不细究了)。
语法是
with temp_table1 as
(
select * FROM table
),
temp_table2 as
(
select * FROM table
),
...
with as最后必须跟select语句,哪怕是select sydate from dual
mysql没有实现with as这个语法,mysql要解决这个问题,临时表是不能够实现的,因为mysql的临时表在一个总的select语句中只能打开一次临时表,否则会报cant reopen XXX 的错误,我实践发现,mysql可以用视图来做,因为没有临时视图这个说法,所以创建视图后需要自己手工清理
create view XXX as (SELECT * FROM table)
drop view


mysql可能还存在一个解决方案,没有深入研究了,就是表变量,大体就是用一个变量去代替一串sub query吧




留言

熱門文章