Aggiornare dati in tabella - cerco suggerimenti

di valtere il
16 risposte

Salve a tutti e buona domenica piovosa

così ho colto l'occasione per agggiornare il db Access che uso in ufficio!

avrei un problema su come aggiornare il campo di una tabella confrontando il contenuto di due campi.

ho già fatto varie query di aggiornamento e tutto funziona finchè i dati da confrontare sono uguali, con la nuova query dovrei aggiornare confrontando due campi su tabella diverse, dove tabella A ha il campo sigla di 2 caratteri, mentre tabella B ha il campo sigla di 7 caratteri, dove solo i primi due sono uguali al campo di tabella A…il resto è una sequenza alfanumerica

quando trovo i due dati uguali devo ovviamente aggiornare il campo Note della tabellaB  pcopiando quanto ho in Note della tabella A

come posso fare a risolvere la questione ???

PS:fino ad ora ho sempre lavorato con i classici wizard che propone Access…ma non prendo paura de devo far qualcosa in visualizzazione SQL

graie per eventuali suggerimenti

Valter

16 Risposte

  • Credo che sarebbe il caso che mostrassi tabelle, campi e relazioni nel db.

  • Ecco qui…speriamo sia più chiara la cosa…

    tabella A ho la sigla a 2 cifre mentre in tabella B ho la sigla intera (2cifre, spazio, 5caratteri alfanumerici) 

    vorrei aggiornare “note_compagnia” della tabella B quando i dati della sigla sono uguali nelle prime due cifre di tabella B

  • Non ho ben capito a cosa serve quello che stai facendo… ma ad ogni modo potresti usare l'operatore Like nel criterio della query.

  • Stavo provando con un “ Left([sigla_completa];2) ”  tra i criteri di tabellaB

    ma con il Like come faccio a “fermarmi” ai primi due caratteri del campo sigla_completa ???

    PS: son dati statistici che adesso faccio a mano…, la tabella B viene aggiornata ogni giorno…son centinaia di righe al giorno…

    la tabellaA mi serve come riferimento ….poi prima di chiudere il DB lancio la query che mi aggiorna i dati nella tabellaB…

  • Devi utilizzare anche la funzione Left. Cosa intendi quando dici che stai provando con Left? Non funziona?

  • Esatto, ho messo Left([sigla_completa];2)  tra i criteri di tabellaB ma se la eseguo non mi aggiorna nulla

  • 11/02/2024 - valtere ha scritto:


    Stavo provando con un “ Left([sigla_completa];2) ”  tra i criteri di tabellaB

    La funzione Left è corretta, ma non la devi scrivere nel Criterio. In visualizzazione struttura query aggiungi una colonna dove scrivi qualcosa del genere:

    XXsigla: Left([sigla_completa];2)

    poi sfrutti il campo XXsigla per proseguire nei tuoi intenti.

    Nell'immagine della visualizzazione struttura query hai messo un join tra due campi incompatibili. [sigla_2cifre] non avrà mai gli stessi valori di [sigla_completa].

  • Scusa ma se nel criterio scrivi:

    Left([sigla_completa];2) Like Left([note compagnia];2)

    Non funziona?

  • Ho eliminato il join tra le tabelle 

    quando eseguo di dice che aggiornerà 20 righe, anche se in realtà in tabella B ne ho solo 5, mentre in tabella A sono 5 (5 x 4 =20)

    l'aggiornamento della tabella B ha prodotto che tutti i record hanno la medesima compagnia, anche cambiando il valore 2 mi scrive sempre Ryanair 

    forse faccio prima a prendermi i dati dello scorso anno, mi filtro tutti i voli, estrapolo il campo sigla_completa  e faccio la query di aggiornamento con il join tra le due tabelle (le voci sono uguali)… 

    però era una sfida personale…magari imparato il principio di funzionamento mi tornava utile per altre cose

  • 11/02/2024 - Antony73 ha scritto:


    Scusa ma se nel criterio scrivi:

    Left([sigla_completa];2) Like Left([note compagnia];2)

    Non funziona?

    cioè fatto così ??

    non va, ovvero aggiorna tabella B ma ci scrive sempre Ryanair 

  • Secondo me non devi creare un campo calcolato. Quella espressione la devi mettere nel criterio di uno dei due campi della query che hai mostrato prima.

  • Infatti ho notato che ci ha messo l'espr davanti…

    sicuramente ho capito male io come costruire la query…ho riprovato così…ma non aggiorna nulla

    per oggi basta…domani riprendo in ufficio ….

    grazie a tutti per le preziose informazioni

    Valter - Venezia

  • Ho riletto. Ho sbagliato io. La condizione di criterio deve essere:

    Left([sigla_completa];2) Like Left([sigla_2cifre];2)

  • Puoi provare così:

    UPDATE TabellaA INNER JOIN (SELECT Left([sigla_completa],2) AS sigla_2cifre, TabellaB.note_compagnia FROM TabellaB) AS TabB ON TabellaA.sigla_2cifre = TabB.sigla_2cifre SET TabB.note_compagnia = [TabellaA].[note_compagnia];
Devi accedere o registrarti per scrivere nel forum
16 risposte