gpt4 book ai didi

mysql - WITH语句VS子查询

转载 作者:行者123 更新时间:2023-11-29 06:53:02 24 4
gpt4 key购买 nike

使用这种语法有什么好处:

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 的新功能?

最佳答案

MySQL 8 对 MySQL 进行了相当大的重写。我相信两者的执行方式相同——因为 MySQL 改进了子查询的处理。

也就是说,第二个版本与早期版本的 MySQL 兼容。第一个版本很方便,有几个原因:

  • 它允许重复使用表达式。子查询在查询中仅出现一次。一个 CTE 可以被多次引用。
  • CTE 可以引用其他 CTE。这可以防止出现大量子查询的嵌套问题。
  • CTE 支持递归 CTE,非常方便。

我不建议仅使用子查询或 CTE 来选择特定列。但是,我猜这只是为了说明目的,与您的实际问题无关。

Here从优化角度来看它们是相同的引用:

For derived tables (subqueries in the FROM clause), the optimizer has these choices:

  • Merge the derived table into the outer query block

  • Materialize the derived table to an internal temporary table

For view references and common table expressions, the optimizer has the same choices as for derived tables.

关于mysql - WITH语句VS子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46744787/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com