MySQL DELETE solo di alcuni record

sabato 28 maggio 2011 - 07.02
Tag Elenco Tags  VB.NET  |  .NET 3.5  |  Windows Server 2003  |  Visual Studio 2008  |  MySQL 5.5

pigeonit Profilo | Newbie

Ciao a tutti sto cercando di fare una query di comando, per la precisione una query di cancellazione ma non mi riesce. In pratica ho una tabella con un solo campo dove ogni record è una data poi ho un'altra tabella con altri campi di cui uno è una data. le tabelle si chiamano "giorni_feriali" la prima e il campo si chiama "giornata" mentre la seconda si chiama "temp_seconda_visita" e il cui campo che devo analizzare si chiama "TSV_Reservation". dalla prima tabella voglio eliminare tutti i record che non abbiano una corrispondente data nella seconda tabella nel campo "TSV_Reservation". Mi spiego meglio: supponiamo che nella prima tabella io abbia un elenco di date dal 01/01/2011 al 31/12/2011 e che nella seconda abbia alcuni record che nel campo "TSV_Reservation" abbiano date comprese nel range sopradescritto es. 01/04/2011. Bene la query deve eliminarmi tutti i record di "giorni_feriali" tranne naturalmente il record 01/04/2011. Io ho provato così:

DELETE uff_personale.giorni_feriali FROM uff_personale.giorni_feriali LEFT OUTER JOIN uff_personale.temp_seconda_visita ON giorni_feriali.Giornata = temp_seconda_visita.TSV_Reservation WHERE temp_seconda_visita.TSV_Reservation IS NULL

Ma naturalmente non va nel senso che cancella comunque tutti i record. Qualche suggerimento?

Cteniza Profilo | Guru

Nella query dovresti aggiungere anche la condizione della chiave uff_personale (id persona dico io) perchè altrimenti la query funziona sempre, basta che manchi una data.

pigeonit Profilo | Newbie

Grazie della risposta. Mi sono spiegato male: Uff_personale non è una tabella ma il nome del DB. Avevo cpopiato il testo che avevo elaborato con dbforge query builder. La corretta sintassi secondo lo standard MySQL dovrebbe essere questa:

DELETE giorni_feriali FROM giorni_feriali LEFT OUTER JOIN temp_seconda_visita ON giorni_feriali.Giornata = temp_seconda_visita.TSV_Reservation WHERE temp_seconda_visita.TSV_Reservation IS NULL

In effetti la query deve cancellare un record in giorni_feriali ogni volta che non trova un record uguale (nel campo TSV_Reservation) nella tabella "temp_seconda_visita"

Grazie

Cteniza Profilo | Guru

Io non so che tipo date tu abbia inserito, se sono datetime come sospetto ti ricordo che c'è anche l'ora, minuti, secondi.
Andare con = solo sulle date mi sembra a questo punto un'impresa.
O converti la data in formato "verificabile" o trasformi la tua query mettendo un range sulle date.

pigeonit Profilo | Newbie

Entrambi i campi (giornata e TSV_Reservation) sono impostati come campi DATE. Nel frattempo comunque ho risolto o meglio qualcuno mi ha suggerito come fare. Posto il codice funzionante.

DELETE giorni_feriali FROM giorni_feriali WHERE giorni_feriali.Giornata NOT IN (SELECT TSV_Reservation FROM temp_seconda_visita WHERE temp_seconda_visita.TSV_Reservation IS NOT NULL)

Ho provato e funziona.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5