web-dev-qa-db-ja.com

MSSQL CTEクエリをMySQLに変換する方法は?

私のMySQLスキーマには、category(id, parentid, name)テーブルがあります

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に「変換」する方法は?

27
Tony

残念ながらMySQLはCTE(Common Table Expressions)をサポートしていません。これは長い間遅れていたIMOです。多くの場合、代わりにサブクエリを使用できますが、この特定のCTEはrecursiveです。クエリ内でそれ自体を参照します。再帰CTEは階層データに非常に役立ちますが、MySqlは階層データをまったくサポートしていません。同じ結果を得るには、ストアドプロシージャを実装する必要があります。

私の以前の答えは良い出発点を提供するはずです:

MySQLの階層データから深さベースのツリーを生成(CTEなし)

32
Jon Black

ありがたいことに、MySQLは 8.0.1CTEをサポート から始まるため、もう必要ありません。

2
Hubbitus

残念ながら、MYSQlまたはXAMPP(MARIADB)mysqlはCTE(COMMON TABLE EXPRESSIONS)をサポートしていません。同じため、ネストされたクエリを使用する必要があります。

詳細については、以下のリンクをクリックしてください。

https://mariadb.com/kb/en/library/with/

0
NupzNupz