2009-11-14 9 views
5

私はsqliteデータベースを使ってデータを保存しています。私は3つのテーブル:Invoice、InvRow、Invdetailsを持っています。テーブル間のsqliteの複数のテーブルからデータを削除するには?

Relationsipは以下のとおりです。

Invoice.Id = InvRow.InvId 
InvRow.Id = Invdetails.RowId 

私は単一のクエリを使用して、3つのテーブルから関連するエントリを削除する必要があります。どうやってやるの? 助けてください?

答えて

8

バージョン3.6.19より前のSQLite(2009年10月14日)は、外部キーの制約をサポートしていませんが、use triggers to maintain relational integrityです。

Starting with 3.6.19ただし、SQLiteはforeign key constraintsON [UPDATE|DELETE] CASCADE句で正しくサポートしています。

+0

こんにちはチェッカー、手動での削除と比較して、削除のパフォーマンスはどうですか?ありがとう。 – pierrotlefou

4

アレックスBは良い答えですが、うまくいきませんでした。あまりにも多くの仕事を今。

残念ながら、私は2つのステートメントで削除する必要がありましたが、うまくいきました。私は2つのテーブル、movies、およびmovie_providersを持っています。movie_providersは、どのプロバイダが自分のムービーを表示しているかを示す結合テーブルです。

私が欲しかった: DELETE FROM movies, movie_pproviders WHERE movie.id = movie_providers.movie_id AND [my constraint]

をしかし2つの段階

DELETE FROM movies WHERE [my constraint] 
DELETE FROM movie_providers where movie_id NOT IN (SELECT DISTINCT id FROM movies) 

をしなければならなかったこれは私が前に映画やmovie_providers間の一貫性を持っていた前提としています。そうでなければ、一貫性を作りました。

+0

これはかなり良い解決策です – Indio

関連する問題