in
La comunità italiana dedicata a Sviluppatori e Architetti IT delle piattaforme Windows

Modifica valori di un campo su più righe

Ultimo messaggio ricevuto il 09-02-2007 11.51 da ledwallet. 3 risposta(e).
Pagina 1 di 1 (4 elemento/i)
Ordina messaggi: Precedente Successivo
  • 07-12-2005 16.13

    • roverso
    • Utente Top 25
    • Registrato il 11-10-2004
    • Padova
    • Messaggi 52

    Modifica valori di un campo su più righe

    Ciao a tutti,

    sono un novello di SQL, è la prima volta che scrivo su questa parte del forum.

    Ho un problema che mi assilla da alcuni giorni:

    ho un database access con 2 tabelle, una tabella si chiama BOL e l'altra BOR.

    BOL è composta da questi campi ed è master: CodCom, NumCli, Nome, Cognome, Indirizzo, TipologiaCliente

    BOR è composta da questi campi ed è detail di BOL: CodCom, NumCli, CodArt, DescrizioneArt, Qta

    Il problema è questo: a seconda che nelle righe BOR di un cliente (tabella BOL) appaia un certo articolo (es. AB1) devo modificare il campo TipologiaCliente nella tabella BOL con TRUE o FALSE.

    Questo controllo va fatto per tutte le righe di BOL.

    Ho tentato con un UPDATE mettendo nel WHERE una SELECT, ma non ho risolto nulla.

    Qualcuno sa dirmi quale istruzione SQL o il metodo corretto per fare ciò?

    Grazie!

    • Log
  • 07-12-2005 21.11 In risposta a

    • theFool
    • Utente Top 10
    • Registrato il 13-07-2005
    • Piacenza
    • Messaggi 127

    Wink [;)] Re: Modifica valori di un campo su più righe

    Ciao,
    ti mostro come fare con un piccolo esempio:

    tblPeople ( ID numerico, Nome testo, Zorro booleano )
    ID  Nome    Zorro
    -----------------
     1  Simone  Falso
     2  Stefano
    Falso

    tblAlias ( IDPeople numerico, Alias testo )
    IDPeople Alias
    --------------
     1       Simo
     2       Ste

    La prima tabella (master) contiene un elenco di persone ed un flag che indicante se tra i soprannomi per una persona vi è anche zorro; la seconda (detail) tabella invece contiene i soprannomi.
    Aggiungendo un record a tblAlias (IDPeople=1, Alias='Zorro'), si viene a conformare il tuo stesso problema: ovvero è necessario aggiornare il flag in tblPeople.
    Per eseguire aggiornare tutti i record di tblPeople in colpo solo devi unire in join le due tabelle nella fase di update, e quindi:

    UPDATE tblPeople LEFT JOIN tblAlias ON (tblPeople.ID=tblAlias.IDPeople AND tblAlias.Alias='zorro')
    SET tblPeople.Zorro = (tblAlias.Alias IS NOT NULL)

    L'operazione di left-join preserva nel risultato finale i record della tabella master, impostando a NULL i campi della tabella detail se non rientrano nella relazione; in base al criterio di join impostato dalla clausola ON i campi della tabella tblAlias saranno valorizzati solo se Alias = 'zorro', diversamente saranno tutti NULL.
    A fronte di tali fatti il test finale (tblAlias.Alias IS NOT NULL) restituirà True se una persona ha il soprannone 'Zorro'.

    Mi sorge tuttavia un dubbio in merito alla tua necessità di un campo per mantenere questa informazione: secondo le regole di normalizzazione dei database dovresti invece creare una vista (query di selezione) che determini in fase di esecuzione questa informazione.
    Tornando all'esempio di cui sopra:

    SELECT tblPeople.*, (tblAlias.Alias IS NOT NULL) AS CheckZorro
    FROM tblPeople LEFT JOIN tblAlias ON (tblPeople.ID=tblAlias.IDPeople AND tblAlias.Alias='zorro')

    Il principio di fondo che viene applicato è lo stesso: porre in atto un left-join tra le due tabelle restringendo il criterio di relazione; il test dei valori NULL consente infine di sapere se quali record della tabella master siano appartenenti effettivamente al join, e quali invece siano stati preservati.

    Ciao ciao

    • Log
  • 08-12-2005 21.33 In risposta a

    • roverso
    • Utente Top 25
    • Registrato il 11-10-2004
    • Padova
    • Messaggi 52

    Re: Modifica valori di un campo su più righe

    MILLLLEEE GRAZIEEEE THE FOOL!

    Ti pagherei una cena (non di pesce perché non mi gusta) !! ;)

    Come ti ho detto non so molto di sql, direi nulla e non capisco bene con che logica le varie funzioni sql creino i record e i campi.

    Capisco anche il tuo dubbio, credo che una vista risolva anche il problema di avere quel campo, ma se una persona conosce 4 parole in una lingua, per spiegare anche il concetto più semplice fa dei giri di frasi assurdi!

    Devo studiare un po' di sql! :o)

    Grazie ancora!

    • Log
  • 09-02-2007 11.51 In risposta a

    Re: Modifica valori di un campo su più righe

    Salve,

             curioso del 3d ho anch'io un problema simile con due tabelle che chiamero' master e slave.
    La tabella master è composta dai vari campi, ma quelli da considerare sono solo i primi due che chiamero' campo A e campo B, sono di tipo testo il primo e numerico il secondo.La tabella slave invece è composta solo da due campi, il campo A e campo B, il primo di tipo testo e il secondo di tipo numerico.
    L'obiettivo è quello di aggiornare il campo A e il campo B della tabella master da quelli della tabella slave e in particolare per ogni record della tabella slave con con il valore del campo A e il valore del campo B della stessa tabella.

    Come si puo' procedere, tenendo conto che tutti i campi della tabella master che non sono il campo A e il campo B devono rimanere invariati?
    E che l'applicazione in questione è microsoft access?

    Grazie mille per ogni spunto

     
    • Log
Pagina 1 di 1 (4 elemento/i)
Prelevato da http://www.devspy.com/forums/t/4020.aspx
DevSpy.com 6.0 © 2001-2008 - Alcuni Diritti Riservati
Salvo diversa indicazione, tutti i contenuti sono pubblicati sotto licenza "Creative Commons Attribution-Share Alike 3.0"