|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: May 2004
Città: Como (PDN)
Messaggi: 428
|
[SQL] Query di aggiornamento+accodamento: si può fare?
Esiste in SQL la possibilità di creare una query che sia al tempo stesso di aggiornamento per i dati già presenti in una tabella, e di accodamento per quelli che invece non esistono?
Per ora ho risolto così: 1) mi creo una tabella temporanea in cui copio tutti gli articoli che mi servono dalla tabella A. 2) faccio partire una query che aggiorni i dati nella tabella B se ci sono corrispondenze con quelli della tabella TEMP 3) elimino le righe corrispondenti dalla tabella TEMP 4) accodo le righe rimanenti nella tabella B 5) elimino la tabella TEMP Però è un procedimento macchinoso, se ci fosse la possibilità di creare la query (così come c'è in Access!!!) mi risparmierebbe tutti questi passaggi.
__________________
Qualcuno qui dentro ritiene di essere l'illuminato, di avere la saggezza e che gli altri siano un branco di poveri idioti. Per questo se non è in grado di argomentare seriamente delle risposte, se non la pensi come lui o se provoca e gli rispondi fugge dal thread e ti mette in ignore list |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: May 2004
Città: Como (PDN)
Messaggi: 428
|
Uppettino!
__________________
Qualcuno qui dentro ritiene di essere l'illuminato, di avere la saggezza e che gli altri siano un branco di poveri idioti. Per questo se non è in grado di argomentare seriamente delle risposte, se non la pensi come lui o se provoca e gli rispondi fugge dal thread e ti mette in ignore list |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: May 2005
Città: Napoli - Fuorigrotta
Messaggi: 471
|
Se la tabella temporanea contiene tutti i campi a te necessari, potresti più facilmente cancellare dalla tabella i dati già esistenti e poi ricaricare tutto, ma questo solo se i campi ci sono tutti!
__________________
Acquisti sul mercatino: grabrihc, LucaXbox360, Yarsha,micanto1,American horizo,Fnac,schumyFast,STECCO,Ezechiele25,17 Vendite sul mercatino: musodatopo,alexbands,mspr,anto.wajo |
![]() |
![]() |
![]() |
#4 |
Junior Member
Iscritto dal: Nov 2006
Messaggi: 17
|
purtroppo farò sql solo il prossimo anno :P
però... se sai come crearla in access, ti consiglio di crearla li, visualizzare il codice e convertirlo in sql standard con uno dei tanti convertitori di codice presenti in rete... mai provato ma... tentar non nuoce no? ![]() se ti puo essere utile: http://www.fonlow.com/zijianhuang/dbconverter/ |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
L'istruzione che cerchi e' un'istruzione SQL standard dalla versione SQL2003, che non e' stata recepita da tutti i motori SQL.
L'istruzione dovrebbe chiamarsi UPSERT (una istruzione come SELECT, UPDATE, DELETE per intenderci) ma p.es. Oracle l'ha chiamata MERGE (e' stata messa li' prima del 2003) Quindi il poterlo fare nativamente dipende dal motore che stai utilizzando. Altrimenti puoi sempre usare il seguente costrutto: Da preferirsi quando si e' alla ricerca di velocita'. Codice:
per ciascun record UPDATE if no row updated INSERT Anche in presenza di transazioni ACIDe infatti 2 processi possono entrambi superare contemporaneamente lo statement UPDATE, per trovarsi contemporaneamente ad eseguire la INSERT, che funzionerebbe per la prima e fallirebbe per la seconda. Il seguente invece e' lento, ma non soffre della concorrenza Codice:
per ciascun record INSERT if dup_val_on_index (primary key violata) UPDATE
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: May 2004
Città: Como (PDN)
Messaggi: 428
|
Quote:
__________________
Qualcuno qui dentro ritiene di essere l'illuminato, di avere la saggezza e che gli altri siano un branco di poveri idioti. Per questo se non è in grado di argomentare seriamente delle risposte, se non la pensi come lui o se provoca e gli rispondi fugge dal thread e ti mette in ignore list |
|
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: May 2004
Città: Como (PDN)
Messaggi: 428
|
Quote:
![]()
__________________
Qualcuno qui dentro ritiene di essere l'illuminato, di avere la saggezza e che gli altri siano un branco di poveri idioti. Per questo se non è in grado di argomentare seriamente delle risposte, se non la pensi come lui o se provoca e gli rispondi fugge dal thread e ti mette in ignore list |
|
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: May 2004
Città: Como (PDN)
Messaggi: 428
|
Quote:
![]()
__________________
Qualcuno qui dentro ritiene di essere l'illuminato, di avere la saggezza e che gli altri siano un branco di poveri idioti. Per questo se non è in grado di argomentare seriamente delle risposte, se non la pensi come lui o se provoca e gli rispondi fugge dal thread e ti mette in ignore list |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:26.