Я полагаю, что следующий код будет работать так, как вы хотите / описали: -
DROP TABLE tableg;
DROP TABLE tableb;
DROP TABLE tablea;
DROP TABLE tablec;
DROP TABLE tabled;
DROP TABLE tablee;
CREATE TABLE IF NOT EXISTS tablea (id INTEGER PRIMARY KEY, name TEXT UNIQUE);
CREATE TABLE IF NOT EXISTS tablec (id INTEGER PRIMARY KEY, name TEXT UNIQUE);
CREATE TABLE IF NOT EXISTS tabled (id INTEGER PRIMARY KEY, name TEXT UNIQUE);
CREATE TABLE IF NOT EXISTS tablee (id INTEGER PRIMARY KEY, name TEXT UNIQUE);
CREATE TABLE IF NOT EXISTS tablef (id INTEGER PRIMARY KEY, name TEXT UNIQUE);
CREATE TABLE IF NOT EXISTS tableb (id INTEGER PRIMARY KEY,
tbida REFERENCES tablea(id) ON DELETE CASCADE,
name,
tbidc REFERENCES tablec(id) ON DELETE CASCADE,
tbidd REFERENCES tabled(id) ON DELETE CASCADE,
tbide REFERENCES tablee(id) ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS tableg (id INTEGER PRIMARY KEY,
name TEXT,
tbide REFERENCES tablee(id) ON DELETE CASCADE
);
INSERT OR IGNORE INTO tablea (name) VALUES('A-Fred'),('A-Bert'),('A-Mary'),('A-Sue'),('A-Ann'),('A-Jane'),('A-Tom');
INSERT OR IGNORE INTO tablec (name) VALUES('C-Fred'),('C-Bert'),('C-Mary'),('C-Sue'),('C-Ann'),('C-Jane'),('C-Tom');
INSERT OR IGNORE INTO tabled (name) VALUES('D-Fred'),('D-Bert'),('D-Mary'),('D-Sue'),('D-Ann'),('D-Jane'),('D-Tom');
INSERT OR IGNORE INTO tablee (name) VALUES('E-Fred'),('E-Bert'),('E-Mary'),('E-Sue'),('E-Ann'),('E-Jane'),('E-Tom');
INSERT OR IGNORE INTO tableb (name, tbida, tbidc, tbidd, tbide) VALUES
('B-X1',1,1,1,1),
('B-Y1',1,3,4,5),
('B-Z1',6,2,2,2)
;
INSERT OR IGNORE INTO tableg (name, tbide) VALUES('G-X1',5),('G-Y1',3),('G-Z1',4);
SELECT * FROM tablea
JOIN tableb ON tablea.id = tbida
JOIN tablec ON tablec.id = tbidc
JOIN tabled ON tabled.id - tbidd
JOIN tablee ON tablee.id = tableb.tbide
JOIN tableg ON tableg.id = tablee.id
;
DELETE FROM tablea WHERE id = 1; -- <<<<<<<<<<
SELECT * FROM tablea
JOIN tableb ON tablea.id = tbida
JOIN tablec ON tablec.id = tbidc
JOIN tabled ON tabled.id - tbidd
JOIN tablee ON tablee.id = tableb.tbide
JOIN tableg ON tableg.id = tablee.id
;
Первый результат (т.е. загруженные связанные данные (согласно полностью объединяющим таблицам)): -
Второй результат после удаления первой строки из таблицы A (то есть A-Fred ): -
То есть ON DELETE CASCADE выполняет иерархическое удаление, когда DELETE FROM tablea WHERE id = 1;
действует