2012-01-12 14 views
24

nel mio schema di MySQL, ho il tavolo category(id, parentid, name)Come trasformare una query CTE MSSQL in MySQL?

In MSSQL, ho quella query CTE (per costruire un albero di categoria dal basso verso l'alto per un ID categoria in dotazione:

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 

Come 'trasformare' quella query a MySQL

risposta

32

Purtroppo MySql non supporta CTE (Common Table Expressions) questo è attesa da tempo IMO Spesso, si può semplicemente utilizzare una sottoquery invece, ma questo particolare è CTE ricorsiva ?..: si riferisce a se stesso dentro la coda ry. Le CTE ricorsive sono estremamente utili per i dati gerarchici, ma ancora: MySql non li supporta affatto. Devi implementare una stored procedure per ottenere gli stessi risultati.

Una risposta precedente di mine dovrebbe fornire un buon punto di partenza:

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

+0

Penso che sia tutto ciò che volevo, molte grazie :) – Tony

+0

@ f00, quindi lo implementeranno mai? O la risposta è "mai"? – Pacerier

-2

Per fortuna non è più necessario, come MySQL a partire dal 8.0.1supports CTE.

+0

Questo non fornisce una risposta alla domanda. Per criticare o richiedere chiarimenti da un autore, lascia un commento sotto il loro post. - [Dalla recensione] (/ recensione/post di bassa qualità/16938206) – Jonathan

+0

@Jonathan Ma risponde alla domanda :) –

+0

@ KubaOber Hai ragione - Probabilmente avrei dovuto contrassegnarlo con una risposta solo per collegamento. Dovresti davvero aggiungere del codice per spiegare come funziona, piuttosto che limitarti a collegarti a un sito web. In questo modo è meno probabile che venga contrassegnato e rifiutato. Una volta che hai fatto, lascia un commento e ritrai il mio commento. – Jonathan