• Super User

    [MySQL] "Sicronizzare" due tabelle tramite il campo di relazione

    Ciao a tutti voi.

    Ho la necessita di "sincronizzare" due tabelle:

    ESEMPLARI
    id, etc....

    EXPO
    id, id_esemplari

    Diciamo che:

    • ESEMPLARI e' la tabella madre con "id" chiave primaria
    • EXPO e' in relazione con la tabella ESEMPLARI tramite la colonna id_esemplari

    Io vorrei che tutti gli **id **di ESEMPLARI siano contenuti in **id_esemplari **di EXPO.

    Al momento invece ho una situazione anomala:

    1. non tutti gli **id **di ESEMPLARI sono contenuti in **id_esemplari **di EXPO
    2. su EXPO sono presenti id_esemplari che non trovano una corrispondenza in EXPO.

    Come potrei riallineare il tutto?

    Grazie.


  • User Attivo

    Ciao felino.
    Credo che essendo esemplari la tabella madre sia quella "corretta", oppure no?
    Io svuoterei la tabella expo e provvederei alla ri-creazione delle righe sulla base della tabella esemplari


  • Super User

    Alla fine ho risolto tramite queste due query:

    
    -- Ho rimosso le righe contenenti gli ID_ESEMPLARI non presenti nella tabella ESEMPLARI
    DELETE FROM expo_westie 
    WHERE NOT EXISTS(SELECT NULL
    FROM esemplari f
    WHERE f.id = id_esemplari)
                     
    -- Ho inserito gli ID della tabella ESEMPLARI non presenti nella tabella EXPO_WESTIE
    INSERT INTO expo_westie (id_esemplari)
    SELECT id 
    FROM esemplari
    WHERE id NOT IN (
    SELECT id_esemplari 
    FROM expo_westie
    )
    
    

    Magari sarebbe meglio usare una foreign key, vero?