在 SQLite 3 的另一个 table 中删除行和引用行

Delete row and referencing rows in another table in SQLite 3

我正在使用 SQLite 来尝试和学习更多 SQL。我有一个像这样填充的 SQLite 3 数据库:

create table playlist (id integer primary key autoincrement, name text);

create table playlistitem (id integer primary key autoincrement, 
    playlist_id integer, name text);

insert into playlist (name) values ("Moss");
insert into playlist (name) values ("Jen");

insert into playlistitem (playlist_id, name) values (1, "Roy");
insert into playlistitem (playlist_id, name) values (1, "Richmond");
insert into playlistitem (playlist_id, name) values (2, "Denholm");

太好了,现在 "Moss" 播放列表中有两个播放列表项目,"Roy""Richmond";我在 "Jen" 播放列表中有一项:"Denholm".

我想做的是通过一次查询删除 "Moss" 播放列表及其所有项目。

我看到了这样的东西,但对我来说失败了:

delete playlist, playlistitem from playlist
    inner join playlistitem on playlistitem.playlist_id = playlist.id
    where playlist.name = "Moss";

失败:

Error: near "playlist": syntax error

我做错了什么?

sqlite 在 delete 语句中不支持 join。您必须使用单独的查询,根据 playlist_id 从第二个 table 中删除,在 playlist 上触发删除,或者使用 on delete cascade:[= 使该引用成为外键18=]

create table playlistitem (
    id integer primary key autoincrement,
    playlist_id integer, name text,
    foreign key(playlist_id) references playlist(id) on delete cascade);

然后只使用 delete from playlist where name='Moss'.

不要忘记启用外键 - pragma foreign_keys=1(您必须在每个 sqlite 连接上重新启用它,例如作为连接后的第一个命令)。