Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [Access2007] Update annidate con Select - Query aggiornabile

    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

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Prova questa query su una copia della tabella. Non ti voglio sulla coscienza.

    codice:
    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

  3. #3
    Grazie mille per la risposta.. sta volta 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?

  4. #4
    Grazie comunque.. ho verificato e con quella query fa quello che dovrebbe fare!
    Il secondo problema l'ho risolto con una formula excel dato che era più semplice che creare una sql procedur ad hoc!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.