2012-01-12 49 views
24

在我的MySQL架构,我有category(id, parentid, name)如何将MSSQL CTE查询转换为MySQL?

在MSSQL,我有一个CTE查询(从下往上建一个目录树的提供的类别ID:

with CTE (id, pid, name) 
as 
(
    select id, parentid as pid,name 
    from category 
    where id = 197 
     union all 
     select CTE.pid as id , category.parentid as pid, category.name 
     from CTE 
      inner join category 
      on category.id = CTE.pid 
) 
select * from CTE 

如何'变换'该查询到MySQL?

回答

32

不幸的是,MySQL不支持CTE(通用表表达式),这是很久以前的IMO,通常你可以使用子查询来代替,但是这个特殊的CTE是递归:它是指在自己内部RY。递归CTE对分层数据非常有用,但是又一次:MySql根本不支持它们。您必须实施存储过程才能获得相同的结果。

我的一个以前的答案应该提供一个良好的起点:

Generating Depth based tree from Hierarchical Data in MySQL (no CTEs)

+0

我认为这就是我想要的,非常感谢:) – Tony 2012-01-12 11:13:49

+0

@ f00,那么他们是否会执行它?或者答案是“从不”? – Pacerier 2015-01-20 04:29:13

-2

值得庆幸的是,没有必要了,因为MySQL的从8.0.1supports CTE开始。

+0

这不提供问题的答案。要批评或要求作者澄清,请在其帖子下方留言。 - [来自评论](/评论/低质量帖/ 16938206) – Jonathan 2017-08-04 18:58:06

+0

@Jonathan但它确实回答了这个问题:) – 2017-08-04 19:12:31

+0

@KubaOber你说得对 - 我可能应该标记它只有链接的答案。你应该真的添加一些代码来解释这是如何工作的,而不仅仅是链接到一个网站。这样就不太可能得到标记和反对投票。一旦你完成了,留下评论,我会收回我的评论。 – Jonathan 2017-08-04 19:15:48