Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    9

    [SQL] update, query aggiornabile

    salve scusate, sono nuovo e non so se la sezione sia quella giusta, ma ho visto facendo ricerche che molti postano qui problemi simili... vabbe casomai scusatei in anticipo...

    dovrei risistemare un database aggiungendo informazioni di sintesi, ma non riesco a farlo con un update, per ora sono costretto ad usare l'insert into ma è veramente scomodo e preferirei farlo con un update...

    sto utilizzando access 2002, ho un database con le tabelle:

    clienti con i campi codcli (codice cliente), nome, acqtot (importo totale degli acquisti fino a gennaio 2008), numacqtot (numero degli acquisti effettuati)
    vendite con i campi codcli, iverig (importo dell'acquisto), data , luogo


    ora mi trovo a dover aggiungere dei valori di sintesi, ma purtroppo non riesco a farlo con un update.

    per inserire il valore di acqtot e numacqtot ho provato in diversi modi con l'update ma mi dice sempre che serve una query aggiornabile, ed alla fine sono costretto a creare una tabella identica con la stessa struttura, una tabella di appoggio dove inserire i valori di sintesi, e copiare ad esempio da clienti e appoggio i dati in clienti2 e poi rinominare...

    esempio per inserire acqtot e numacqtot ho aggiunto i campi acqtot e numacqtot alla tabella clienti e creato un clienti2 vuota.
    e quindi:
    codice:
    insert into clienti2 (codcli, acqtot, numacqtot)
    select codcli, sum(iverig), count(*)
    from vendite
    group by codcli
    con l'update non riesco a mettere dei riferimenti... cioè l'update ad ogni istanza va a sostituire un valore, ma non riesco a dirgli di mettere i valori di sintesi o riferiti ad altre tabelle...

    mettiamo che io voglia mettere anche i campi acqmax e acqmin
    ho provato diverse volte l'update in modi simili a questo:
    codice:
    update clienti c1
    set acqmax = (select max(v.iverig)
    from vendite v
    where c1.codcli = v.codcli)
    oppure creandomi una tabella di appoggio, e mettendoci i valori di codcli, acqmax e acqmin non riesco a fare l'update...

    e quindi sono costretto a fare:
    codice:
    insert into clienti2 (codcli, acqtot, numacqtot, acqmax, acqmin)
    select c.codcli, c.acqtot, c.numacqtot, a.acqmax, a.acqmin)
    from clienti c, appoggio a
    where c.codcli = a.codcli
    anche se in questo caso, essendo max e min sempre funzioni applicate al group by codcli nella tabella vendite avrei potuto fare
    codice:
    insert into clienti2
    select codcli, sum(iverig), count(*), max(iverig), min(iverig)
    from vendite
    group by codcli
    ma le misure che dovrò inserire ora non sono solo risultati del group by codcli...

    insomma non riesco ad esempio facendo un update di far inserire in un certo campo il valore associato ad un'altra variabile di un altra tabella referenziata, cioè esempio il valore di min(iverig) nella tabella appoggio, con il codcli = al codcli della riga che sta aggiornando l'update...

    spero di essermi spiegato ma mi sa che ho fatto un po di confusione...

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,315
    ciao,

    guarda un po qui

    http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=62528


    codice:
    update clienti
    set clienti.acqmax = 
    (
    select max(vendite.iverig)
    from vendite 
    where vendite.codcli = clienti.codcli
    )

    questa l'ho testata con firebird e funziona.

    ciao

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    225
    Mi sa che con access non funziona (ho provato ora una cosa simile). L'unica temo sia lavorare di codice...

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    9
    Originariamente inviato da 123delphi321
    ciao,

    guarda un po qui

    http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=62528


    codice:
    update clienti
    set clienti.acqmax = 
    (
    select max(vendite.iverig)
    from vendite 
    where vendite.codcli = clienti.codcli
    )

    questa l'ho testata con firebird e funziona.

    ciao
    ho provato sia con access2002 e 2003 ma purtroppo non funziona, da lo stesso errore che dava a me, e cioè che è necessaria una query aggiornabile...

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 © 2024 vBulletin Solutions, Inc. All rights reserved.