2015-09-28 15 views
5

Ho una domanda come questa:SE riga esiste quindi eliminare fila in MySQL

IF EXISTS(SELECT 1 FROM table1 WHERE col1 = ? LIMIT 1) THEN 
DELETE FROM table2 WHERE col2 = ? 
END IF 

Ma io non so perché al di sopra di query non funziona. Anche questo non funziona anche:

IF EXISTS(SELECT 1 FROM table1 WHERE col1 = ? LIMIT 1) BEGIN 
DELETE FROM table2 WHERE col2 = ? 
END 

MySQL dire che c'è un errore di sintassi, Come posso risolvere il problema?

+4

MySQL è (generalmente) non un linguaggio di programmazione procedurale; non puoi usare le dichiarazioni di 'IF' al di fuori di una procedura. La documentazione lo dice. Se dovessi effettivamente _read_ it, potresti anche trovare la risposta alla tua domanda. C'è qualche ragione per cui non sei riuscito a leggere la documentazione? –

+0

Sì. Quindi sei praticamente bloccato a fare il 'SE' nella tua logica di applicazione. –

+0

@LightnessRacesinOrbit in realtà ho visto [questa risposta] (http://stackoverflow.com/questions/639854/check-if-a-row-exists-otherwise-insert#639874) e ho pensato che forse è possibile usare "IF". in mysql! comunque ok grazie. – Shafizadeh

risposta

8

È possibile spostare la condizione nella clausola di WHERE di DELETE per ottenere lo stesso effetto, come questo:

DELETE FROM table2 
WHERE col2 = ? 
    AND EXISTS(SELECT 1 FROM table1 WHERE col1 = ? LIMIT 1) 

Si noti che le due ? s sono passati posti in relazione alla query originale.

+0

Grazie, +1 upvote per te. – Shafizadeh

+0

@Sajad Per quanto ne so, solo 'limite 1' funziona con MySql. 'TOP 1' è sintassi Sql Server ([related] (http://stackoverflow.com/q/5668540/335858)). – dasblinkenlight

+0

Il 'LIMIT 1' non è necessario; "ESISTE" lo fa. –

Problemi correlati