MySQL WITH AS 语法
2022-02-20 15:16:00 1143
如果一整句查询中多个子查询都需要使用同一个子查询的结果,那么就可以用with as,将共用的子查询提取出来,加个别名。后面查询语句可以直接用,对于大量复杂的SQL语句起到了很好的优化作用
特别对于UNION ALL比较有用. 因为UNION ALL的每个部分可能相同,但是如果每个部分都去执行一遍的话,则成本太高,所以可以使用WITH AS短语,则只要执行一遍即可。如果WITH AS短语所定义的表名被调用两次以上,则优化器会自动将WITH AS短语所获取的数据放入一个临时表里,如果只是被调用一次,则不会
- WITH AS 优势
- 复用SQL片段, 提高可读性
- 避免多次临时表查询, 提高SQL性能
MySQL在8.0后开始支持该语法
demo
WITH p AS (SELECT * FROM products WHERE name IN ('niko', 'naf'))
SELECT avg(price) FROM p;
WITH c AS (SELECT * FROM category WHERE name = 'pros'),
p AS (SELECT * FROM products WHERE name IN ('niko', 'naf'))
SELECT * FROM c LEFT JOIN p ON c.cid = p.category_id;
后续sql可以直接引用p