Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    26

    Problemi con il comando Update su tabelle multiple

    Ciao a tutti,
    ho la necessità di eseguire una query tra la colonna delle AREE della tabella A, mediante i valori contenuti nella colonna delle AREE della tabella B solo se il campo della colonna dei RIFERIMENTI della tabella A è uguale al campo della colonna dei RIFERIMENTI della tabella B. Quindi:

    Tabella A
    ____________________________
    | ID | Riferimenti | Aree |
    --------------------------------
    | 16 | 123456789 | 3400 |
    --------------------------------

    Tabella B

    ____________________________
    | ID | Riferimenti | Aree |
    --------------------------------
    | 16 | 123456789 | 0 |
    --------------------------------

    Risultato in tabella B dopo Update

    ____________________________
    | ID | Riferimenti | Aree |
    --------------------------------
    | 16 | 123456789 | 3400 |
    --------------------------------

    P.S.: Ho provato ad eseguire la query in questo modo:

    mysql> UPDATE fab, dat SET fab.AREE="dat.AREE" WHERE fab.RIFERIMENTI=dat.RIFERIMENTI;

    Ma il risultato restituito è "0", nonostante tutto risultino esserci dei RIFERIMENTI, ovviamente, uguali tra le due tabelle.

    Grazie in anticipo per gli aiuti, attendo con ansia delucidazioni.
    Ciao

  2. #2
    chiami le tabelle A e B e poi nella query fab, dat...

    la query escludendo le doppie apici e' corretta, bisogna solo vedere chi e' A e chi e' B. Cosi' legge in A e scrive in B

    codice:
    mysql> UPDATE A, B 
              SET B.AREE = A.AREE
              WHERE A.RIFERIMENTI = B.RIFERIMENTI;

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    26
    Grazie innanzi per la risposta, si l’osservazione è giusta ma io stupidamente mi sono dimenticato di dire che l’esempio delle tabelle è del tutto fittizio cioè un esempio, mentre il caso della query invece corrisponde perfettamente alle tabelle e alle colonne che io ho nel database.
    Il mio dubbio è nel fatto che non trova corrispondenze per effettuare modifiche, mentre io se dovessi esplorare le tabelle manualmente e sostituire i dati, le corrispondenze le trovo.
    Quindi la mia domanda è: Esiste una sintassi diversa oppure sono io che faccio qualche errore?
    Ancora grazie per la risposta, ciao.

  4. #4
    la corrispondenza deve esserci con un valore in comune. Esattamente come una EQUI-JOIN

    Senza questa non hai alcuna possibilita'. l'esempio che ti ho postato e' corretto. Se non va sicuramente hai qualche errore.
    Un errore comune e' scambiare l'ordine delle tabelle.campo nel set.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    26
    Credo che non finirò mai di ringraziarti, dunque, ti spiego meglio di cosa ho bisogno.
    Io ho una tabella chiamata FAB ed una chiamata DAT, quindi allora, la tabella FAB è costituita dalle colonne ID, RIFERIMENTO, AREE ecc. come la tabella DAT.
    Ora ciò che le due tabelle hanno in comune in maniera univoca sono le colonne RIFERIMENTO mentre le colonne AREE una è compilata, quella di DAT, mentre quella di FAB è vuota.
    Il mio fine è poter inserire il contenuto della colonna AREE presente nella tabella DAT nella colonna AREE della tabella FAB in relazione all’unico dato univoco delle due tabelle che è la colonna RIFERIMENTO.
    La query che ti ho postato prima può, secondo te, eseguire ciò che mi serve?
    Ciao, e ancora grazie.

  6. #6
    copia dat.AREE in fab.AREE

    codice:
    UPDATE fab, dat 
    SET fab.AREE = dat.AREE
    WHERE fab.RIFERIMENTI = dat.RIFERIMENTI
    per l'update si suppone che i campi RIFERIMENTI siano univoci ed in rapporto 1-1

    In alternativa se si tratta solo di aggiornare alla pari una tabella potresti anche farci una copia e saluti al secchio.

    Svuoti fab con un "TRUNCATE TABLE fab" e poi esegui:

    INSERT INTO fab
    SELECT * FROM dat

    Vedi tu cosa ti conviene. Puoi sempre fare delle prove su tabelle copia.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    26
    Non funziona, non trova riscontranze nella colonna RIFERIMENTI.
    Perchè??? Si è vero che non tutti i record sono riscontrati nell'altra tabella, ma è anche vero che su 2500 record, 1700 circa lo sono.
    Cavoletto perchè non funziona

  8. #8
    Originariamente inviato da Quad
    Non funziona, non trova riscontranze nella colonna RIFERIMENTI.
    Perchè??? Si è vero che non tutti i record sono riscontrati nell'altra tabella, ma è anche vero che su 2500 record, 1700 circa lo sono.
    Cavoletto perchè non funziona
    che versione hai di mysql e come esegui le query. E' ora di postare un po' di codice e la struttura delle due tabelle.

    A volte l'uguale di uno e diverso dall'uguale di un altro.

    puoi sempre provare con una SELECT a vedere cosa ti tira fuori.

    select * from fab
    inner join dat
    ON fab.RIFERIMENTI = dat.RIFERIMENTI

    se non ti tira fuori nulla allora i dati in RIFERIMENTI non sono uguali

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    26
    Ok ci riprovo, ma continuiamo domani, se per te non è un problema, perché per me si è fatto troppo tardi devo essere su un cantiere domani (sono geometra).
    Ciao, scusami, e mille grazie per l’aiuto che mi stai dando.
    Notte

  10. #10
    Originariamente inviato da Quad
    Ok ci riprovo, ma continuiamo domani, se per te non è un problema, perché per me si è fatto troppo tardi devo essere su un cantiere domani (sono geometra).
    Ciao, scusami, e mille grazie per l’aiuto che mi stai dando.
    Notte
    Il problema e' tuo ...

    Ho un domani anch'io (spero) anche se non sono un geometra.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

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.