行IDが別のテーブルに存在しないSQLiteテーブルから行を削除する必要があります。 SELECTステートメントは正しい行を返します。
SELECT * FROM cache LEFT JOIN main ON cache.id=main.id WHERE main.id IS NULL;
ただし、deleteステートメントはSQLIteからエラーを生成します。
DELETE FROM cache LEFT JOIN main ON cache.id=main.id WHERE main.id IS NULL;
エラーは次のとおりです:SQLiteエラー1-「左」の近く:構文エラー。使用できる別の構文はありますか?
構文図 でわかるように、SQLiteは明らかにdeleteステートメントとの結合をサポートしていません。ただし、サブクエリを使用してそれらを削除できるはずです。
すなわち。
DELETE FROM cache WHERE id IN
(SELECT cache.id FROM cache LEFT JOIN main ON cache.id=main.id WHERE main.id IS NULL);
(未検証)
サブクエリのルートをたどるので、結合を完全に取り除き、クエリを単純化することもできます。
DELETE FROM cache WHERE id NOT IN (SELECT id from main);