使用此类语法有什么好处:
WITH
cte1 AS (SELECT a, b FROM table1),
cte2 AS (SELECT c, d FROM table2)
SELECT b, d FROM cte1 JOIN cte2
WHERE cte1.a = cte2.c;
代替:
SELECT b, d
FROM (SELECT a, b FROM table1) AS cte1
JOIN (SELECT c, d FROM table2) AS cte2
WHERE cte1.a = cte2.c;
我知道这是MySQL 8的新功能吗?
答案 0 :(得分:2)
MySQL 8是对MySQL的重写。我相信两者都会以同样的方式运行 - 因为MySQL改进了子查询的处理。
也就是说,第二个版本与早期版本的MySQL兼容。第一个版本很方便,原因如下:
我不建议仅使用子查询或CTE来选择特定列。但是,我猜这只是为了说明目的而与你的实际问题相关。
Here是从优化角度来看它们相同的参考:
对于派生表(FROM子句中的子查询),优化器具有 这些选择:
将派生表合并到外部查询块
将派生表具体化为内部临时表
对于视图引用和公用表表达式,优化器具有 与派生表的选择相同。