Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    3,072

    [MySQL]Copiare due tabelle relazionate

    Ciao a tutti, ho 2 tabelle padre/figlio

    legate tramite un id generato dinamicamente


    come posso copiare questa relazione (intendo il record padre e i record figli) in due altre tabelle del DB (con id diversi) mantenendo la stessa relazione?? (tramite una query)

    intendo: se copio il padre della tabella sorgente nel padre della tabella destinazione ....avrò un nuovo id del padre della tabella destinazione, che dovrò usare per associare i suoi figli... quindi quando copio i figli della tabella sorgente nei figli della tabella destinazione dovrò usare il nuovo id per releazionarli.... ma come fare tutto questo con una query??

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    3,072
    Nessun suggerimento???

  3. #3
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Risponderti cosi è difficile

    Dipende molto dal fatto che:

    __ Nella Tabella Padre hai un'altro campo univoco e NotNull
    __ Nella tabella Padre hai un campo totalmente vuoto su tutti i record
    __ Nella tabella Padre puoi crearti un nuovo campo vuoto temporaneo





    Potrebbero esserci una decina di strategie diverse
    anche in funzione delle tue abitudini


    __________________________________________________ ___




    Io farei una miniapplicazione "monouso" appositamente dedicata





    Se ci mandi qualche informazione in piu
    sui 3 punti che ti ho citato sopra
    forse possiamo abbozzare una UPDATE "secca"
    che ti faccia il lavoro desiderato

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    3,072
    Mi basterebbe la soluzione più semplice

    Nella Tabella Padre hai un'altro campo univoco e NotNull
    si ho un campo id, sia nella tabella Padre Sorgente (id di tipo int) sia nella tabella Padre Destinazione (id di tipo varchar(36) guid)


    Nella tabella Padre puoi crearti un nuovo campo vuoto temporaneo
    Teoricamente, si (intendo se non ci sono altre soluzioni)


    Spero in tuo aiuto!!

    Grazie

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    3,072
    Please help me

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    3,072
    Nessun aiutino ((

  7. #7
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Originariamente inviato da Valeria75_bis
    ho un campo id,
    sia nella tabella Padre Sorgente (id di tipo int)
    sia nella tabella Padre Destinazione (id di tipo varchar(36) guid)

    Io conosco troppo poco MySql e in particolare
    non so cosa significa "guid"

    _____________________________________________

    Poi ho capito che le tue tabelle non sono uguali fra di loro
    quindi non è una semplice copia delle 2 tabelle con modifica
    della key esterna.

    ____________________________________________

    Ti posso pero anticipare che se
    La tabella Padre sorgrnte ha ID di tipo int
    e la tabella Padre destinazione ha ID di tipo varchar(36)

    La stessa differenza dovrai avere fra il formato dei dati
    delle Key esterne delle 2 Tabelle Figlie




  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    3,072
    Padre e figlio sorgente sono relazionati con campi dello stesso tipo

    idem oer Padre e figlio destinazione

    Quello che chiedo....è almeno una della << decina >> di soluzioni possibili

    Grazie

  9. #9
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Immagimiamo che hai le tabelle

    __________ "F1" ( Fornitori )
    __ F1Id ___ Numerico __ NotNull ___ Duplicati Non Ammessi __ Contatore __ Key _
    __ F1For __ Testo _____ NotNull ___ Duplicati Non Ammessi
    __ F1Via __ ( quello che vuoi )
    __ F1Cit __ ( quello che vuoi )

    ________ "O1" ( Ordini )
    __ O1Id ___ Numerico __ NotNull ___ Duplicati Non Ammessi __ Contatore __ Key _
    __ O1F1 ___ Numerico __ NotNull ___ Duplicati Ammessi ___________________ KeyEsterna __
    __ O1Mat __ ( quello che vuoi )
    __ O1Pre __ ( quello che vuoi )

    Con una relazione 1 a molti fra F1Id e O1F1 ( con integrita referenziale )


    Poi hai le tabelle Identiche ( nella struttura )

    __________ "F2" ( Fornitori )
    __ F2Id ___ Numerico __ NotNull ___ Duplicati Non Ammessi __ Contatore __ Key _
    __ F2For __ Testo _____ NotNull ___ Duplicati Non Ammessi
    __ F2Via __ ( quello che vuoi )
    __ F2Cit __ ( quello che vuoi )

    ________ "O2" ( Ordini )
    __ O2Id ___ Numerico __ NotNull ___ Duplicati Non Ammessi __ Contatore __ Key _
    __ O2F2 ___ Numerico __ NotNull ___ Duplicati Ammessi ___________________ KeyEsterna __
    __ O2Mat __ ( quello che vuoi )
    __ O2Pre __ ( quello che vuoi )

    Con una relazione 1 a molti fra F2Id e O2F2 ( con integrita referenziale )
    __________________________________________________ ______________

    Per una mia prassi il nome della tabelle è sempre
    composto da 2 caratteri mentre il nome dei
    campi è sempre composto dai 2 caratteri della tabella
    + pochi altri caratteri significativi.

    Niente Spazi e niente TrattiniBassi niente caratteri accentati apostrofati ecc

    __________________________________________________ _______________

    Nella tabella F1 hai i seguenti Record
    F1Id____F1For________F1Via____F1Cit
    6_______Fiat
    7_______Citroen
    8_______Mercedes
    9_______Audi
    10______Ford

    Nella tabella O1 hai i seguenti record
    O1Id____O1F1____O1Mat____O1Pre
    1_______6_______Panda
    2_______6_______Punto
    3_______7_______Picasso
    4_______6_______Fiorino
    5_______7_______Nemo
    6_______8_______CalsseA
    7_______10______Fiesta


    Copi con una Insert i record di F1 in F2
    ottienu questi risultato:
    F2Id____F2For_______F2Via____F2Cit
    15______Fiat
    16______Citroen
    17______Mercedes
    18______Audi
    19______Ford


    Hai bisogno di copiare con una altra INSERT i record
    di O1 in O2 modificando il valore di O2F2 in modo
    che vengano mantenute le relazioni corrette

    __________________________________________________ _______________


    Queste sono le premesse ( il problema )
    Nella risoluzione cerchero di essere semplice e di
    fare tutti i passaggi in modo chiaro
    evitando query nidificate.

    quindi cominciamo a fare un po di Viste per generare
    i record da mettere in O2



    __________________________________________________ _______________
    __________________________________________________ ______________
    __________________________________________________ ______________



    Fai una prima query di nome "Q1" con questo testo:

    SELECT
    O1.O1Id,
    O1.O1F1,
    O1.O1Mat,
    O1.O1Pre,
    F1.F1For,
    F2.F2For,
    F2.F2Id
    FROM
    (
    (
    F1
    INNER JOIN
    F2
    ON F1.F1For = F2.F2For
    )
    INNER JOIN
    O1
    ON F1.F1Id = O1.O1F1
    )
    LEFT JOIN
    O2
    ON F2.F2Id = O2.O2F2
    ;

    __________________________________________________ ____

    Fai una seconda query di nome "Q2" con questo testo

    SELECT
    Q1.O1Id,
    Q1.F2Id,
    Q1.O1Mat,
    Q1.O1Pre
    FROM
    Q1
    ;


    Nella query "Q2" hai gia i record precisi
    da inserire nella tabella "O2"

    Adesso devi fare un semplice INSERT da Q2 a O2

    __________________________________________________ ____________

    Quindi fai una terza query di accodamento ( INSERT )
    di nome "Q3" con questo testo:

    INSERT INTO
    O2
    ( O2F2, O2Mat, O2Pre )
    SELECT
    Q2.F2Id,
    Q2.O1Mat,
    Q2.O1Pre
    FROM
    Q2
    ;


    __________________________________________________ _____________


    Quando esegui Q3 ottieni che la tabella O2 che era
    vuota si popola di questi record:

    O2Id_____O2F2_____O2Mat _____O2Pre
    8________15_______Panda
    9________15_______Punto
    10_______15_______Fiorino
    11_______16_______Picasso
    12_______16_______Nemo
    13_______17_______CalsseA
    14_______19_______Fiesta

    che corrispondono appunto ai record di O1
    con la modifica della Key Esterna ( O2F2 )




    __________________________________________________ ______________
    __________________________________________________ ______________
    __________________________________________________ ______________
    __________________________________________________ ______________

    l'esempio sopra lo ho testato con Access,
    se tu usi MySql potresti avere delle leggere differenze


    NB: "Studiati" bene la query Q1 lei è la chiave del tutto


  10. #10
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    3,072
    Grazie infinite!!!

    Provo subito

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