Новая функция MySQL8 — общее выражение (CTE)

MySQL8.0 начал поддерживать общее табличное выражение (CTE) (общее табличное выражение), то есть предложение WITH.

Легко начать:

Следующий SQL представляет собой простое выражение CTE, похожее на рекурсивный вызов.В этом SQL сначала выполните select 1, а затем получите результат запроса и отправьте значение n для выбора n+1 в объединении всех из cte, где n <10, Затем рекурсивно вызовите следующий SQL-оператор объединения таким образом.

WITH recursive cte(n) as 
( select 1
  union ALL
  select n+1 from cte where n<10
)
select * from cte;

Введение в дело:

Таблица персонала содержит id, name и m_id, который является соответствующим вышестоящим id. Данные следующие:

Если мы хотим выяснить отношения между начальником и подчиненным каждого сотрудника, мы можем использовать следующий метод.

Рекурсивный CTE:

with recursive staff_view(id,name,m_id) as
(select id ,name ,cast(id as char(200)) 
 from staff where m_id =0
 union ALL 
 select s2.id ,s2.name,concat(s1.m_id,'-',s2.id)
 from staff_view as s1 join  staff as s2
 on s1.id = s2.m_id
)
select * from staff_view order by id

Преимущество использования общих табличных выражений состоит в том, что даже при наличии 4, 5, 6 или даже более слоев на верхнем и нижнем уровнях это может помочь нам пройти по ним, и старый способ написания операторов SQL необходимо скорректировать.

Подведем итог:

Общие табличные выражения аналогичны производным таблицам, таким как временные таблицы или представления на уровне операторов. На CTE можно ссылаться в запросе несколько раз, оно может ссылаться на другие CTE, оно может быть рекурсивным. CTE поддерживает такие операторы, как SELECT/INSERT/UPDATE/DELETE.

Supongo que te gusta

Origin blog.csdn.net/m0_70299172/article/details/130496370
Recomendado
Clasificación