Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di Bugu
    Registrato dal
    Nov 2007
    Messaggi
    871

    [access] query aggiornamento condizionale

    Devo creare una query di aggiornamento che mi aggiorni i record di una tabella, e fino a qui tutto ok.
    La questione è che la query mi deve aggiornare SOLO i record che SONO SEGUITI da un record che nel campo STATO ha -1 come valore.

    In pratica devo dire alla query: controlla i valori del campo STATO. Se il valore è -1 vai al record precedente e imposta il campo PROVA a "ok".

    Come posso dare questa istruzione?
    Thanks
    Linux User
    ---------
    Solo due cose sono infinite: l'universo e la stupidità umana, e non sono tanto sicuro della prima.

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Prova così:

    codice:
    UPDATE tabella SET prova = "ok"
    WHERE id in (
    SELECT id-1
    FROM tabella
    WHERE stato=-1)
    Ti consiglio di fare prima una prova su una copia di backup.

  3. #3
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Ripensando a quanto ti ho scritto la query funzionerà solo se gli id saranno progressivi.
    Se ad esempio hai un record con id 5 e il precedente è il numero 3 la query che ti ho scritto non aggiornerà tale record. Vedi un pò tu cosa ti serve.

    edit. Adesso mi pare vada bene anche in presenza di record mancanti

    codice:
    UPDATE tabella SET prova = "ok"
    WHERE id in (
    SELECT MAX(b.id) AS precedente
    FROM tabella AS a INNER JOIN tabella AS b ON b.id < a.id
    WHERE a.stato = -1
    GROUP BY a.id);

  4. #4
    Utente di HTML.it L'avatar di Bugu
    Registrato dal
    Nov 2007
    Messaggi
    871
    Originariamente inviato da nicola75ss
    codice:
    UPDATE tabella SET prova = "ok"
    WHERE id in (
    SELECT MAX(b.id) AS precedente
    FROM tabella AS a INNER JOIN tabella AS b ON b.id < a.id
    WHERE a.stato = -1
    GROUP BY a.id);
    mi va in errore sul campo PROVA che ti ho sottolineato. Mi dice "errore di sintassi nell'istruzione UPDATE" evidenziandomi il campo "prova" sottolineato
    Linux User
    ---------
    Solo due cose sono infinite: l'universo e la stupidità umana, e non sono tanto sicuro della prima.

  5. #5
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Originariamente inviato da Bugu
    mi va in errore sul campo PROVA che ti ho sottolineato. Mi dice "errore di sintassi nell'istruzione UPDATE" evidenziandomi il campo "prova" sottolineato
    Strano. L'ho testata su access (versione office xp) e funziona bene.
    Cerca di isolare l'errore.
    Ad esempio prova a fare

    UPDATE tabella SET prova = "ok" WHERE id in (1,2,3)

    e vedi se così funziona.

    Prova anche questa query

    SELECT MAX(b.id) AS precedente
    FROM tabella AS a INNER JOIN tabella AS b ON b.id < a.id
    WHERE a.stato = -1
    GROUP BY a.id

    e vedi se separatemente funziona o ti restituisce qualche errore.

  6. #6
    Utente di HTML.it L'avatar di Bugu
    Registrato dal
    Nov 2007
    Messaggi
    871
    Allora: quell'errore avevo sbagliato io a scrivere il codice.
    Ora però quando eseguo la query mi restituisce un altro errore: "tipo di dati non corrispondenti nell'espressione CRITERIO".

    Il codice che ho adattato alla mia tabella, ai miei campi e alla mia situazione è questo:

    codice:
    UPDATE vendite SET vendite.[string] = [string] & "9M"
    WHERE (((vendite.ID) In (SELECT MAX(b.id) AS precedente FROM vendite AS a INNER JOIN vendite AS b ON b.id < a.id WHERE a.reso = -1 GROUP BY a.id)));
    In pratica se nella tabella VENDITE un record ha il campo RESO a -1, la query deve aggiornare il record precedente aggiungendo al campo STRING il valore "9M"

    Quando la eseguo, però mi da l'errore che ti ho descritto. Il campo STRING è in formato testo ovviamente.
    Linux User
    ---------
    Solo due cose sono infinite: l'universo e la stupidità umana, e non sono tanto sicuro della prima.

  7. #7
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Rinomina il campo string magari in stringa. Evita parole riservate che possono generare ambiguità e casini vari. Il discorso vale per qualunque rdbms.

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