column sqlite left-join sql-delete

column - Eliminar filas de la tabla SQLite cuando no existe ninguna coincidencia en otra tabla



sqlite rename column (2)

Aparentemente, SQLite no admite uniones con la declaración de eliminación, como puede ver en los diagramas de sintaxis . Sin embargo, debería poder utilizar una subconsulta para eliminarlos.

es decir.

DELETE FROM cache WHERE id IN (SELECT cache.id FROM cache LEFT JOIN main ON cache.id=main.id WHERE main.id IS NULL);

(No probado)

Necesito eliminar filas de una tabla de SQLite donde sus identificadores de fila no existen en otra tabla. La instrucción SELECT devuelve las filas correctas:

SELECT * FROM cache LEFT JOIN main ON cache.id=main.id WHERE main.id IS NULL;

Sin embargo, la declaración de eliminación genera un error de SQLIte:

DELETE FROM cache LEFT JOIN main ON cache.id=main.id WHERE main.id IS NULL;

El error es: SQLite Error 1 - cerca de "izquierda": error de sintaxis. ¿Hay otra sintaxis que pueda usar?


Ya que va por la ruta de la subconsulta, también podría deshacerse de la unión y simplificar la consulta:

DELETE FROM cache WHERE id NOT IN (SELECT id from main);