Scusate, ho trovato l'errore in una relazione errata delle tabelle.... ora funziona tutto l'sql e quindi con mysql è possibile realizzare funzioni INSERT che contengono subquery nidificate!
robce64
@robce64
Post creati da robce64
-
RE: Istruzioni sql non riconosciute da mysql
-
RE: Mysql funzione INSERT con subquery ramificata
Scusate, ho trovato l'errore in una relazione errata delle tabelle.... ora funziona tutto l'sql e quindi con mysql è possibile realizzare funzioni INSERT che contengono subquery nidificate!
-
Mysql funzione INSERT con subquery ramificata
Salve a tutti, premetto che non sono esperto di sql, stò realizzando un grosso database con mysql che collego a libreoffice, vi chiedo se qualcuno può gentilmente darmi una mano per un grosso problema che no riesco a risolvere.
Io vorrei fare questo... semplificando il concetto, ho due tabelle:
CORSO_SCOLASTICO_ALUNNO
con i seguenti campi
id_corso_scolastico (chiave primaria autoincrementante)
id_alunno
id_data_anno
Classe
SezioneSCRUTINI
con questi campi:
id_scrutinio (chiave primaria)
id_corso_scolastico
promosso
data_scrutinioIo vorrei dare una istruzione dove mi si vada cercare nella tabella SCRUTINI gli id_anno_scolastico che hanno l'anno della data_scrutinio uguale all'anno corrente, tra questi chi nel campo promosso ha valore "si" ed infine chi tra questi ha il valore della Classe < di 3, quindi inserire gli id_alunno relativi ad ogni corso scolastico trovato, nella tabella CORSO SCOLASTICO ALUNNO, oltre all'id_alunno mi dovrà anche inserire l'id_data_anno aumentato di 1, la Classe aumentata di 1 e la stessa Sezione.
L'Sql che avevo provato io era questa:
Codice: Seleziona tutto
INSERT INTO corso_scolastico_alunno (id_alunno, id_data_anno, Classe, Sezione) SELECT id_alunno, id_data_anno+1, Classe+1, Sezione FROM corso_scolastico_alunno WHERE Classe < '3' AND id_alunno IN (SELECT id_corso_scolastico FROM scrutini WHERE promosso = 'si' AND id_data_anno IN (SELECT id_data_anno FROM date_anni WHERE YEAR( data_scrutinio ) = YEAR( CURRENT_DATE )))però non mi funziona... ma io in sql non sono tanto esperto... c'è qualche anima buona che mi può aiutare? Se riesco a risolvere questo problema mi si spianerebbe di parecchio la strada per il database che stò realizzando....
Se non si capisse da quello che ho messo sopra, detto in parole povere io vorrei fare la ricerca di chi ha dato l'esame nell'anno corrente, poi trovare chi è stato promosso e tra tutti questi chi faceva la prima e la seconda classe, poi questi valori andrebbero a popolare la tabella del corso scolastico relativo all'anno prossimo (ecco perchè andrebbe messo id_data_anno +1), con il valore della Classe aumentato di uno (se faceva la 1 andra in 2 ecco perchè Classe +1) mentre la sezione sara riportata pari pari (se faceva la sezione A farà ancora la sezione A)
In pratica se un Alunno nel 2013 fa il corso scolastico con classe 1, sezione C, se verrà promosso il corso scolastico l'anno prossimo dovrà riportare anno 2014, classe 2, sezione C.
Linserimento dei nuovi corsi per i promossi dovranno riguardare chiaramente le classi 1 e 2 perchè i promossi delle classi 3 non faranno più la scuola media e quindi nessun nuovo corso scolastico ma andranno alle superiori.Riuscite a darmi una mano in questa cosa? Pleaseeeee
-
RE: Istruzioni sql non riconosciute da mysql
Allora, seguendo il suggerimento di thedarkita sono riuscito a fare eseguire l'istruzione, però i dati nella tabella non sono stati inseriti .... forse mysql non elabora per la funzione INSERT INTO subquery annidate?
Io vorrei fare questo... semplificando il concetto, ho due tabelle:CORSO_SCOLASTICO_ALUNNO
con i seguenti campi
id_corso_scolastico (chiave primaria autoincrementante)
id_alunno
id_data_anno
Classe
SezioneSCRUTINI
con questi campi:
id_scrutinio (chiave primaria)
id_corso_scolastico
promosso
data_scrutinioIo vorrei dare una istruzione dove mi si vada cercare nella tabella SCRUTINI gli id_anno_scolastico che hanno l'anno della data_scrutinio uguale all'anno corrente, tra questi chi nel campo promosso ha valore "si" ed infine chi tra questi ha il valore della Classe < di 3, quindi inserire gli id_alunno relativi ad ogni corso scolastico trovato, nella tabella CORSO SCOLASTICO ALUNNO, oltre all'id_alunno mi dovrà anche inserire l'id_data_anno aumentato di 1, la Classe aumentata di 1 e la stessa Sezione.
L'Sql che avevo provato io era questo:
INSERT INTO corso_scolastico_alunno (id_alunno, id_data_anno, Classe, Sezione) SELECT id_alunno, id_data_anno+1, Classe+1, Sezione FROM corso_scolastico_alunno WHERE Classe < '3' AND id_alunno IN (SELECT id_corso_scolastico FROM scrutini WHERE promosso = 'si' AND id_data_anno IN (SELECT id_data_anno FROM date_anni WHERE YEAR( data_scrutinio ) = YEAR( CURRENT_DATE )))
però non mi funziona... ma io in sql non sono tanto esperto... c'è qualche anima buona che mi può aiutare? Se riesco a risolvere questo problema mi si spianerebbe di parecchio la strada per il database che stò realizzando....
Se non si capisse da quello che ho messo sopra, detto in parole povere io vorrei fare la ricerca di chi ha dato l'esame nell'anno corrente, poi trovare chi è stato promosso e tra tutti questi chi faceva la prima e la seconda classe, poi questi valori andrebbero a popolare la tabella del corso scolastico relativo all'anno prossimo (ecco perchè andrebbe messo id_data_anno +1), con il valore della Classe aumentato di uno (se faceva la 1 andra in 2 ecco perchè Classe +1) mentre la sezione sara riportata pari pari (se faceva la sezione A farà ancora la sezione A)
In pratica se un Alunno nel 2013 fa il corso scolastico con classe 1, sezione C, se verrà promosso il corso scolastico l'anno prossimo dovrà riportare anno 2014, classe 2, sezione C.
Linserimento dei nuovi corsi per i promossi dovranno riguardare chiaramente le classi 1 e 2 perchè i promossi delle classi 3 non faranno più la scuola media e quindi nessun nuovo corso scolastico ma andranno alle superiori.Riuscite a darmi una mano in questa cosa? Pleaseeeee
-
RE: Istruzioni sql non riconosciute da mysql
ah...grazie... adesso provo come mi hai indicato...
-
Istruzioni sql non riconosciute da mysql
Salve a tutti, premetto che sono novizio di sql, mysql, ecc.. stò realizzando un database scolastico con mysql che gestisco tramite libreoffice, il problema che mi è sorto è nell'aggiornare, tramite una serie di istruzioni sql, una tabella che ho definito CORSO SCOLASTICO ALUNNO con i dati dei ragazzi promossi nell'ultimo anno , non mi dilungo su questi particolari, vorrei solo sapere da qualche esperto di mysql se nella istruzione che ho scritto c'è qualcosa di incompatibile con mysql, in quanto se lancio l'istruzione su un database creato da zero con libreoffice tutto funziona, ma se la lancio sul database che mi comunica con mysql mi dà questo errore 1: [MySQL][ODBC 5.2(a) Driver][mysqld-5.5.27-log]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"corso_scolastico_alunno" ("id_alunno", "id_data_anno", "Classe", "Sezione") SEL' at line 1
Le istruzioni che voglio dare sono queste:
INSERT INTO "corso_scolastico_alunno" ("id_alunno", "id_data_anno", "Classe", "Sezione") SELECT "id_alunno", "id_data_anno"+1, "Classe"+1, "Sezione" FROM "corso_scolastico_alunno" WHERE "Classe" < '3' AND "id_alunno" IN (SELECT "id_corso_scolastico_alunno" FROM "scrutini" WHERE "promosso" = TRUE AND "id_data_anno" IN (SELECT "id_data_anno" FROM "date_anni" WHERE YEAR("data_2quad") = YEAR( CURRENT_DATE )))
C'è per caso qualcosa di scorretto nella sintassi? mi potete dare una mano magari correggendo l'errore che ho fatto?
Altra cosa, queste istruzioni sql le devo poi inglobare in un codice macro che collegherò ad una azione di un pulsante in un formulario per attivare l'istruzione sql.... la macro è questa:
Sub INSERT (oEvent As Object) 'Button > Execute > event
oForm = oEvent.Source.Model.Parent 'MainForm from Button
oStatement = oForm.ActiveConnection.createStatement() 'Create an SQL statement object
sSQL = "INSERT INTO ""corso_scolastico_alunno"" (""id_alunno"", ""id_data_anno"", ""Classe"", ""Sezione"") SELECT ""id_alunno"", ""id_data_anno""+1, ""Classe""+1, ""Sezione"" FROM ""corso_scolastico_alunno"" WHERE ""Classe"" < '3' AND ""id_alunno"" IN (SELECT ""id_corso_scolastico_alunno"" FROM ""scrutini"" WHERE ""promosso"" = TRUE AND ""id_data_anno"" IN (SELECT ""id_data_anno"" FROM ""date_anni"" WHERE YEAR( ""data_2quad"" ) = YEAR( CURRENT_DATE )))"
oStatement.executeUpdate( sSQL ) 'Execute the SQL command
oForm.reload
End SubCome vedete ho usato la doppia virgolettatura e su database interamente fatto con libreoffice funziona.... dovrei usare la doppia virgolettatura anche su database collegato a mysql?
Grazie...spero tanto di trovare qualcuno che può aiutarmi....:(
-
Un saluto a tutti!
Ciao sono Roberto, mi sono appena unito a voi!