2015-01-30 2 views
0

SQLite를 사용하여 놀고 더 많은 SQL을 익히고 있습니다. 이 같은 인구 SQLite는 3 데이터베이스가 :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").

재생 목록과 모든 항목을 단일 쿼리로 삭제하고 싶습니다.

내가 나를 위해 실패 같은 것을 보았다 :

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

실패 : 내가 잘못

Error: near "playlist": syntax error 

을 뭐하는 거지?

답변

1

sqlite는 delete 문에 join을 지원하지 않습니다.

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'를 사용 : 당신은 playlist에 삭제 트리거를 만드는 playlist_id을 기준으로 두 번째 테이블에서 삭제 별도의 쿼리를 사용하거나 해당 참조를 on delete cascade와 외부 키를 확인해야합니다.

외래 키 - pragma foreign_keys=1을 사용하도록 설정해야합니다 (연결 후 첫 번째 명령과 같이 각 sqlite 연결에서이 기능을 다시 사용 설정해야 함).

관련 문제