При выполнении рекурсивных действий рекомендуется принять дополнительные меры предосторожности, чтобы не допустить окончания какого-либо бесконечного цикла (которого надежно избегают только гуру, а я нет). Очевидно, что если это работает как нужно, это можно удалить. Однако это не так дорого, чтобы сделать это действительно необходимым. Если число ожидаемых строк больше, увеличьте значение или полностью удалите его, как только вы будете абсолютно уверены.

всех сил пытаюсь преобразовать

a | a1,a2,a3
b | b1,b3
c | c2,c1

чтобы:

a | a1
a | a2
a | a3
b | b1
b | b2
c | c2
c | c1

Вот данные в формате sql:

CREATE TABLE data(
  "one"  TEXT,
  "many" TEXT
);
INSERT INTO "data" VALUES('a','a1,a2,a3');
INSERT INTO "data" VALUES('b','b1,b3');
INSERT INTO "data" VALUES('c','c2,c1');

Решение, вероятно, является рекурсивным выражением Common Table.



Вот пример, который делает что-то похожее на одну строку:

WITH RECURSIVE list( element, remainder ) AS (
    SELECT NULL AS element, '1,2,3,4,5' AS remainder
        UNION ALL
    SELECT
        CASE
            WHEN INSTR( remainder, ',' )>0 THEN
                SUBSTR( remainder, 0, INSTR( remainder, ',' ) )
            ELSE
                remainder
        END AS element,
        CASE
            WHEN INSTR( remainder, ',' )>0 THEN
                SUBSTR( remainder, INSTR( remainder, ',' )+1 )
            ELSE
                NULL
        END AS remainder
    FROM list
    WHERE remainder IS NOT NULL
)
SELECT * FROM list;

(первоначально из этого сообщения в блоге:https://blog.expensify.com/2015/09/25/the-simplest-sqlite-common-table-expression-tutorial)

Это производит:

element | remainder
-------------------
NULL    | 1,2,3,4,5
1       | 2,3,4,5
2       | 3,4,5
3       | 4,5
4       | 5
5       | NULL

проблема заключается в том, чтобы применить это к каждой строке таблицы.

Ответы на вопрос(1)

Ваш ответ на вопрос