2011-12-03 16 views
14

Ho un database SQLITE con due tabelle. La tabella A ha un timestamp intero e un'altra colonna intera contenente un id riga che si riferisce a una riga nella tabella B che ha due timestamp.SQLITE - cancella le righe con inner join?

voglio eliminare tutte le righe della tabella A in cui è timestamp non si trova tra i due timestamp nella tabella B, e il ROWID è uguale a X.

Ecco quello che ho in questo momento, ma io sono ottenere un errore di sintassi:

DELETE FROM network 
WHERE ROWID in (
    SELECT ROWID 
    FROM track 
    INNER JOIN network ON (track.ROWID = network.trackId) 
    WHERE network.timestamp > track.stopTime OR network.timestamp < track.startTime 
     AND network.trackId = X 

risposta

16

Non si dispone di una parentesi di chiusura per la sottoselezione. Prova questo:

DELETE FROM network 
WHERE ROWID in (
    SELECT ROWID 
    FROM track 
    INNER JOIN network ON (track.ROWID = network.trackId) 
    WHERE network.timestamp > track.stopTime OR network.timestamp < track.startTime 
     AND network.trackId = X 
) 

Se ciò non funziona, provare a postare l'errore di sintassi effettivo.

+0

Ciao, grazie per il post. Avevi ragione, questo ha risolto il primo errore di sintassi. Anche WHERE ROWID avrebbe dovuto essere WHERE trackId, e SELECT ROWID avrebbe dovuto essere SELECT track.ROWID. La sceneggiatura ora sembra funzionare. Grazie per l'aiuto! :) –

+0

DELETE FROM WHERE tblRecipe IDCategoria a ( SELEZIONA IDCategoria DA tblSubCategories INNER JOIN tblRecipe ON (tblSubCategories.categoryID = tblRecipe.categoryID) DOVE tblRecipe.categoryID = 9; – Raju

+0

errore ::: :(vicino ";" : Errore di sintassi) – Raju