gpt4 book ai didi

sqlite - 在SQLite 3中删除行并引用另一个表中的行

转载 作者:行者123 更新时间:2023-12-03 18:50:12 25 4
gpt4 key购买 nike

我正在使用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在join语句中不支持delete。您必须使用单独的查询,该查询基于playlist_id从第二个表中删除,在playlist上执行删除触发器,或者使用on delete cascade引用该外键:

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连接上重新启用此功能,例如,连接后作为第一个命令)。

关于sqlite - 在SQLite 3中删除行并引用另一个表中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28241985/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com