Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di Aires
    Registrato dal
    Jan 2010
    Messaggi
    725

    [Mysql] Popolare tabella da esistente

    Ciao a tutti, avrei una richiesta particolare, il titolo potrebbe indurvi a pensare ad argomenti già trattati ma in realtà la cosa è un po più complicata. Cercherò di essere il più chiaro possibile.


    Allora inanzitutto lavoriamo con 3 Tabelle. Abbiamo una tabella chiamata Lavoro, una tabella chiamata Stato e una tabella chiamata Transito.

    Struttura tabella Lavoro .
    codice:
     
    id_lavoro
    descrizione
    id_stato
    Struttura tabella Stato .
    codice:
     
    id_stato
    descrizione
    Struttura tabella Transito .
    codice:
     
    id
    col_a
    col_b
    col_c
    col_d
    col_e
    col_f
    Ora, la tabella Transito viene popolata tramite l'importazione di un file Csv. Per quanto riguarda questa non ci sono problemi importa i dati nelle rispettive colonne correttamente.

    A questo punto la tabella Transito è popolata correttamente, mi serve però andare a popolare la tabella Lavoro inserendo i dati dalla tabella Transito ma, ecco due problemi:
    1. Come importare solo alcuni dati dalla tabella Transito. Ad esempio fai un inserimento di tutti i dati presenti nella tabella Transito in quella Lavoro ponendo ad esempio nel campo descrizione cio che è contenuto nel campo col_d. (Se non fosse possibile eseguire tale operazione con nomi di colonne diversi, posso modificare il nome di queste).
    2. Come notate nella tabella lavoro viene salvato l' id_stato, non la descrizione, mentre nella tabella transito nella col_f viene salvata la descrizione dello stato. Quindi come operare per confrontare la tabella Transito con la tabella Stato e successivamente all'atto di inserimento inserirne l'id_stato?

    Ringrazio tutti anticipatamente. Spero ci sia qualche soluzione per la quale basti usare una serie di query.
    Originariamente inviato da qazar
    Se finisci di leggere il thread mi sono corretto,è solo i kernel scritto in html.
    Originariamente inviato da rnlflame
    Comunque non dovevano crollare

  2. #2
    non e' chiarissimo se non che tu voglia copiare molto semplicemente il campo da una tabella all'altra come nuovo record.

    1. Come importare solo alcuni dati dalla tabella Transito. Ad esempio fai un inserimento di tutti i dati presenti nella tabella Transito in quella Lavoro ponendo ad esempio nel campo descrizione cio che è contenuto nel campo col_d. (Se non fosse possibile eseguire tale operazione con nomi di colonne diversi, posso modificare il nome di queste).
    questo lo puoi fare con insert ... select

    codice:
    insert into lavoro (descrizione)
    select col_d from transito
    
    // e qui puoi anche aggiungere un where o un raggruppamento oppure l'order by
    2. Come notate nella tabella lavoro viene salvato l' id_stato, non la descrizione, mentre nella tabella transito nella col_f viene salvata la descrizione dello stato. Quindi come operare per confrontare la tabella Transito con la tabella Stato e successivamente all'atto di inserimento inserirne l'id_stato?
    Qui non capisco la domanda. Se le tre tabelle devono essere "parte di un tutto" cioe' con una struttura comune deve per forza esserci una relazione "univoca" cioe' un preciso record che accomuni le tre tabelle e non necessariamente deve essere lo stesso per tutte e tre. per esempio:

    tab1.id_tab1 = tab2.id_tab1
    tab2.id_tab2 = tab3.id_tab2

    ma non mi e' chiara la tua seconda richiesta.

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

  3. #3
    Utente di HTML.it L'avatar di Aires
    Registrato dal
    Jan 2010
    Messaggi
    725
    Intanto grazie mille, il fatto della Insert + Select lo ignoravo proprio, ma come bisognerebbe strutturare l'insert se inseriamo più record?

    Questa l'ho capita ma mi chiedo per più campi se vanno messe in ( ) le varie select.
    codice:
    insert into lavoro (descrizione) select col_d from transito
    Per la seconda richiesta, penso si possa sfruttare nuovamente la insert piu select.
    Semplicemente nella tabella Transito ho un campo con la descrizione dello stato, io però devo inserire l'identificativo associato a quello stato nella tabella Lavoro. Quindi fare una select preventiva.

    La tabella Lavoro e la tabella Stato sono associate.
    La tabella Transito non è associata a nulla ma posso ad esempio porre l'associazione tra col_f (cito una colonna a caso) con il campo descrizione della tabella stato in quanto coincideranno.

    Grazie mille per gli aiuti che mi stai fornendo


    Edit:
    Ho trovato questa sintassi
    codice:
    INSERT california_authors (au_id, au_lname, au_fname) 
    SELECT au_id, au_lname, au_fname 
    FROM authors WHERE State = 'CA'
    Ma bisogna ottenere tutti i dati con un unica select oppure c'è la possibilità di eseguirne diverse?
    Originariamente inviato da qazar
    Se finisci di leggere il thread mi sono corretto,è solo i kernel scritto in html.
    Originariamente inviato da rnlflame
    Comunque non dovevano crollare

  4. #4
    Originariamente inviato da Aires

    Ma bisogna ottenere tutti i dati con un unica select oppure c'è la possibilità di eseguirne diverse?
    No, puoi fare un update multi tabella. l'importante e' avere un riferimento certo tra le tabelle.

    un esempio:

    codice:
    update tab1, tab2
    set tab1.descrizione = tab2.altro_campo
    where tab1.campo_rif = tab2.campo_rif
    In pratica con insert ... select crei la struttura, con update multitable l'aggiorni

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

  5. #5
    Utente di HTML.it L'avatar di Aires
    Registrato dal
    Jan 2010
    Messaggi
    725
    Ok grazie mille, provo a vedere se riesco ad applicarlo
    Originariamente inviato da qazar
    Se finisci di leggere il thread mi sono corretto,è solo i kernel scritto in html.
    Originariamente inviato da rnlflame
    Comunque non dovevano crollare

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.