MySQL從8.0版本開始支持WITH語句,可以使得查詢更加簡單、清晰、高效。
WITH cte AS ( SELECT column_1, column_2, column_3 FROM table_1 ) SELECT cte.column_1 as col_1, SUM(table_2.column_2) as sum_col2 FROM cte JOIN table_2 ON cte.column_2 = table_2.column_2 GROUP BY cte.column_1 ORDER BY sum_col2 DESC;
上面的查詢代碼中,WITH語句的名稱為cte,查詢的結果集指定了三個列。接下來的SELECT語句中引用了cte,后面會和另外一個表進行JOIN操作,最后對結果進行了分組和排序。如果沒有使用WITH語句,可能需要在查詢中寫多次相同的子查詢,WITH語句可以讓查詢語句更加簡潔易懂。
需要注意的一點是,WITH語句的查詢結果也可以被其他查詢使用。例如:
WITH cte AS ( SELECT column_1, column_2, column_3 FROM table_1 ) SELECT cte.column_1 as col_1, SUM(table_2.column_2) as sum_col2 FROM cte JOIN table_2 ON cte.column_2 = table_2.column_2 GROUP BY cte.column_1 HAVING sum_col2 >( SELECT AVG(sum_col2) FROM ( WITH cte_2 AS ( SELECT column_1, column_2, column_3 FROM table_1 ) SELECT cte_2.column_1 as col_1, SUM(table_2.column_2) as sum_col2 FROM cte_2 JOIN table_2 ON cte_2.column_2 = table_2.column_2 GROUP BY cte_2.column_1 ) as subquery ) ORDER BY sum_col2 DESC;
上面的代碼中,內部的WITH語句cte_2也被用于了HAVING子句中的子查詢中。
總結來說,MySQL支持WITH語句可以讓查詢更加清晰、簡潔、高效,特別是對于需要多次使用相同子查詢的場景。但是需要注意WITH語句的查詢結果也可以被其他查詢使用。
上一篇css怎么讓盒子左對齊
下一篇css怎么讓文本向左偏移