[Access2007] UPDATE annidate con SELECT e "query aggiornabile"

venerdì 19 novembre 2010 - 01.18
Tag Elenco Tags  Access (.mdb)

romualdo85 Profilo | Newbie

Salve a tutti,

so che chiamare "Access" un database è un sacrilegio.. ma purtroppo mi trovo a dover lavorare con questo (per di più emulato in un mac )

Il mio problema, o almeno il primo, è questo ; ho una tabellona che è il risultato di un'aggregazione progressiva di più tabelle riguardanti dati vitivinicoli, così mi trovo a dover assegnare codici vino.
Questa tabella ha queste importanti colonne per ciò che devo fare( Idcantina, idvino,vino), su tutta la tabella sono già inseriti tutti gli idcantina ed vino ma mancano ancora diversi idvino che devono essere "armonizzati" perchè frutto dell'aggregazione di più tabelle.
Ora io devo attribuire ad un certo vino x di una cantina X un idvino x per esempio.. se il vino è lo stesso ovvero se l'Idcantina e vino sono gli stessi(ma gli attributi secondari no) e manca l'idvino(ovvero è a NULL per il momento) all'idvino dovrà essere ancora assegnato x.

Ora il problema è che in access per fare una update della colonna idvino mi devo servire di una select annidata (almeno io l'avevo pensata così) di questo tipo:

UPDATE TAB T
SET T.IDVINO=(
SELECT DISTINCT T1.IDVINO
FROM TAB T1
WHERE T1.IDCANTINA=T.IDCANTINA AND T1.VINO=T.VINO AND IDVINO IS NOT NULL);

Solo che access non me la fà eseguire perchè mi dice qualcosa del tipo: "Operazione deve utilizzare una query aggiornabile" che non ho la più pallida idea di che cosa voglia dire (dato che non ho mai usato access ma di solito database seri tipo oracle, mysql and co, ma ora sono costretto ad usare questo! ).
Come posso fare? la query è giusto? mi consigliate qulcos'altro?

2) La domanda 2 è subordinata alla risoluzione della prima comunque la chiedo ugualmente; dovrò quindi continuare a completare la colonna Idvino ma in questo caso dovrò assegnare id nuovi progressivi (per esempio se ho un vino nuovo y nella cantina x dovrò dare un progressivo successivo all'ultimo idvino presente nella cantina; oppure se ho una cantina nuova e quindi vini nuovi dovrò ri-iniziare da 0); come posso fare una update del genere?!

Grazie mille per l'aiuto e attendo fiducioso! ^^

Marco

dinoxet Profilo | Senior Member

PROVA COSì E FAMMI SAPERE :

UPDATE T
SET T.IDVINO=T1.IDVINO
FROM T1 INNER JOIN T ON T1.IDCANTINA=T.IDCANTINA AND T1.VINO=T.VINO AND IDVINO IS NOT NULL;


DINOXET
__________________________________________
impossible is only a word

romualdo85 Profilo | Newbie

Grazie mille per la risposta..
con questa versione un po’ modificata della tua query:

update tabella as t1
inner join tabella as t2
on t1.vino = t2.vino and t1.idcantina=t2.idcantina
set t1.idvino = t2.idvino
where t1.idvino is null

sembra compilare!
una sola cosa continua a lasciarmi in dubbio (e quindi non do' il commit..) e cioe’ che una volta processato dice che una cosa come 175000 righe saranno cambiate.. quando la tabella ne contiene sulle 75000 e ovviamente solo una piccola parte dovrebbe essere interessata da questo update.
Cosa mi sfugge?

dinoxet Profilo | Senior Member

175000 RIGHE SONO LA SOMMA DEI RECORD DELLE 2 TABELLE?



DINOXET
__________________________________________
impossible is only a word

romualdo85 Profilo | Newbie

Bè no.. dato che sarebbe 75000X2= 150000 ...ma potrebbero essere la somma dei record delle due tabelle(cioè la stessa in "autojoin") + quelli realmente elaborati.. e avrebbe un certo senso.

In ogni caso grazie mille.. sono risciuto a risolvere con la query sopracitata.. e per la seconda parte ho usato un formula in excel.

grazie ancora!

Marco
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5