Hola a todos,
ho un problemuccio che non so se si può risolvere, io ci provo
A causa di alcune query ESTREMAMENTE complesse (e per estremamente intendo esattamente 264 righe di codice sql che fa uso di tabelle derivate, subquery, funzioni e via dicendo) ho la necessità utilizzare delle tabelle pivot.
Per intenderci, su DB2, su AS400, è possibile fare
(non so fino a che punto abbia senso la query di sopra, è solo un esempio ^^)codice:WITH tabella_pivot_1 AS ( SELECT * FROM tabella_1 WHERE campo_1 = 'XYZ'; ), tabella_pivot_2 AS ( SELECT * FROM tabella_2 WHERE campo_1 = 'ZYX'; ), tabella_pivot_3 AS ( SELECT * FROM tabella_pivot_1 AS tp1 INNER JOIN tabella_pivot_2 AS tp2 ON ( tp2.tabella_2_id = tp1.tabella_1_id ) WHERE campo_4 = 'ABC'; ), tabella_pivot_4 AS ( SELECT * FROM tabella_pivot_3 AS tp3 LEFT JOIN tabella_pivot_1 AS tp1 ON ( tp3.tabella_1_id = tp1.tabella_1_id ) WHERE campo_3 = 'CBA'; ) SELECT . . .
Avrei la necessità di fare questo tipo di operazioni su MySQL. Attualmente, come dicevo prima, per evitare di spezzare la query utilizzo delle tabelle derivate, però sono arrivato al punto in cui non posso più gestire la cosa dato che devo rejoinare i dati con se stessi più volte mi ritrovo ad avere una tabella derivata che è quasi la stessa ripetuta e reinserita più volte dentro se stessa :\
Qualcuno conosce un plugin/estensione/componente o comunque qualche soluzione simile alle tabelle pivot presenti su db2, oracle e via dicendo?
Avevo anche pensato ad usare una stored procedures che lavorando sulle view mi componesse i dati, ma in realtà dovrei creare una stored procedure IMMENSAMENTE complessa in quanto le view non possono contenere tabelle derivate (in pratica dovrei creare una decina di view che, necessariamente, dovrebbero essere generate al volo [non so fino a che punto serve una view generata al volo e poi droppata ^^]).
PS: non mi chiedete nulla riguardo alla normalizzazione dei dati, la struttura del db non è mia e non si può toccare ... in realtà ci sono più db ma questo comunque non è un problema.


Rispondi quotando