Kann ich einen ausgewählten Knoten zusammen mit allen darunter liegenden Unterknoten vereinfachen oder verbessern?Löschen von Knoten in einer Datenbankstruktur
Tabelle sieht wie folgt aus:
CREATE TABLE cats (cat_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
cat_pid INTEGER NOT NULL,
cat_name VARCHAR(40)
)
Die Abfrage:
WITH tree (cat_id, cat_pid, level, cat_name) AS
(
SELECT cat_id, cat_pid, 0 as level, cat_name
FROM cats
WHERE cat_pid = :cat_id --parameter from FreePascal/Lazarus
UNION ALL
SELECT cats.cat_id, cats.cat_pid, tree.level + 1, cats.cat_name
FROM cats
INNER JOIN tree ON tree.cat_id = cats.cat_pid
)
DELETE FROM cats
WHERE cat_id IN (SELECT cat_id FROM tree)
OR cat_id=:cat_id
Wenn möglich, möchte ich von der loszuwerden OR in der DELETE-Anweisung, aber nicht wissen, wie.
Eigentlich, wenn Löschen mit Fremdschlüsseln/Kaskadierung gelöscht werden könnte, wäre es auch sehr interessant.
Die Datenbank ist SQLite.
wie SQLite Looks unterstützt 'auf löschen cascade', wenn Sie Richten Sie 'cat_pid' richtig ein, es sollte" einfach funktionieren ": https://www.sqlite.org/foreignkeys.html#fk_actions – Blorgbeard
Ich habe versucht, aber einfügen gab eine" Foreign KEY constraint failed ". cat_pid wurde so eingerichtet: cat_pid INTEGER NOT NULL REFERENZEN cats (cat_id) ON DELETE CASCADE – Rimfire