2017-01-19 5 views
0

Ich habe SQLite 2 Tabelle: Spalten: id, parent_id, WertEntfernen Waisen (SQLite 2) in dtree

1,0,'TOP FIRST' <---- top category "FIRST" 
2,1,'11111-A' <----subcategory of id 1 (FIRST) 
3,1,'11111-B' <----subcategory of id 1 
4,0,'TOP TWO' <---- top category "TWO" 
5,4,'22222-A' <----subcategory of id 4 (TWO) 
6,4,'22222-B' <----subcategory of id 4 
7,100,'to remove' <----- ORPHAN (There is no top category with id=100) 
8,100,'to remove' <----- ORPHAN (There is no top category with id=100) 
9,4,'22222-C' <----subcategory of id 4 (TWO) 

Wie Waisen entfernen (id: 7, 8) aus dieser Tabelle?

Antwort

0

Sie möchten alle Zeilen löschen, für die kein Elternteil existiert. Dies kann mit einem correlated subquery erfolgen:

DELETE FROM MyTable 
WHERE NOT EXISTS (SELECT 1 
        FROM MyTable AS T2 
        WHERE T2.id = MyTable.parent_id); 
+0

Es gibt einen Fehler: SQL Logikfehler oder fehlende Datenbank in der Nähe von „SELECT“: Syntaxfehler –

+0

Es funktioniert in SQLite 3. In SQLite 2 dies nicht funktioniert. Ich habe versucht, PHP (5.3.1) mit SQLite 3 zu verwenden, aber es funktioniert nur mit SQLite 2. –

+0

Wenn Sie wirklich SQLite 2 verwenden möchten, müssen Sie dies manuell implementieren: alle Zeilen lesen; Führen Sie für jede die Unterabfrage aus. und dann lösche die Zeile oder nicht. –