vendredi 11 décembre 2015

SQLite- Normalizing a concatenated field and joining with it?

I have some data stored in comma-separated values in a field and I want to turn those comma-separated values into a temporary table and use those to join to another table

CREATE TABLE STRATEGY (STRATEGY_ID INTEGER PRIMARY KEY, APPLIED_SET_IDS VARCHAR);

CREATE TABLE ACTION_SET (APPLIED_ACTION_SET_ID INTEGER PRIMARY KEY, VALUE VARCHAR);

+-----------+---------------+
|STRATEGY_ID|APPLIED_SET_IDS|
+-----------+---------------+
|          1|1,3,6,7        |
|          2|1,2,4          |

+---------------------+-----+
|APPLIED_ACTION_SET_ID|VALUE|
+---------------------+-----+
|                    1|X    |
|                    2|Y    |
|                    3|Z    |
|                    4|H    |
|                    5|I    |
|                    6|J    |
|                    7|K    |
|                    8|L    |

I know I have to use some form of recursion as shown here. But every attempt I've done has made my head spin a bit. And my temporary table needs to preserve the original concatenated order of APPLIED_SET_ID values as well, like this...

+-----------+-----+--------------+
|STRATEGY_ID|ORDER|APPLIED_SET_ID|
+-----------+-----+--------------+
|          1|    1|             1|
|          1|    2|             3|
|          1|    3|             6|
|          1|    4|             7|
|          2|    1|             1|
|          2|    2|             2|
|          2|    3|             4|

Ultimately, I will join this table to the second existing table and use GROUP_CONCAT to replace the ID's with the corresponding values in the same order.

+-----------+------------------+
|STRATEGY_ID|APPLIED_SET_VALUES|
+-----------+------------------+
|          1|X,Z,J,K           |
|          2|X,Y,H             |

So regular expressions are out thanks to the order (otherwise I could have turned the commas to pipes and joined on a REGEXP statement). How can I achieve this? I know this is not normalized but I need to work with this current structure. Thank you for any help in advance.

Aucun commentaire:

Enregistrer un commentaire