J'ai une table SQLite d'ID enfants et leur ID parent. Où un parent donné peut également apparaître dans la colonne enfant. Par exemple:recherche de parents ultimes avec CTE récursif
child parent
----- ------
3 4
2 3
1 2
5 4
7 8
6 7
Je voudrais transformer ce de la structure récursive à une table où l'enfant est listé dans une colonne et sa société mère ultime (le parent qui reste après tout récusant se fait) est listé dans la autre. Par exemple, le tableau ci-dessus entraînerait:
child ultimate_parent
----- ---------------
3 4
2 4
1 4
5 4
7 8
6 8
Je comprends que cela devrait être possible en utilisant SQLites récursive CTEs, mais je ne parviens pas à développer la requête. Voici ce que j'ai jusqu'à présent, mais il est évidemment incomplet.
WITH RECURSIVE rel(child, parent) AS (
SELECT child, parent FROM relationships
UNION ALL
SELECT child, parent FROM rel
)
SELECT * FROM rel;
Toute aide serait grandement appréciée.
Une décharge de la table d'exemple ci-dessus
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE `relationships` (
`child` INTEGER,
`parent` INTEGER
);
INSERT INTO relationships VALUES(3,4);
INSERT INTO relationships VALUES(2,3);
INSERT INTO relationships VALUES(1,2);
INSERT INTO relationships VALUES(5,4);
INSERT INTO relationships VALUES(7,8);
INSERT INTO relationships VALUES(6,7);
COMMIT;
S'il vous plaît la structure de base de données fournir et le contenu de l'échantillon d'une base de données de jouets stuitably sur mesure comme '.dump' (c.-à-lignes de' créer table ... 'et" inséré dans ... "). – Yunnosch