Visualizzazione dei risultati da 1 a 6 su 6

Hybrid View

  1. #1
    Faccio un esempio così sarà più facile spiegarmi; questa è la situazione

    DB1

    Id1_AutoIncremental PIVA1_UniqueIndex NomeAzienda1
    100 012 Azienda1
    101 013 Azienda2
    103 014 Azienda3


    DB2
    Id2_AutoIncremental PIVA2_UniqueIndex NomeAzienda2
    10 013 Azienda2

    eseguo la query ed ottengo:

    DB3
    SuperId_AutoIncremental Id1_UniqueIndex Id2 PIVA
    1 100 null 012
    2 101 10 013
    3 103 null 014

    ---------------------------------------------------------------------------------------

    Ora aggiungo un nuovo record nel DB2 ed ottengo:


    DB1

    Id1_AutoIncremental PIVA1_UniqueIndex NomeAzienda1
    100 012 Azienda1
    101 013 Azienda2
    103 014 Azienda3


    DB2
    Id2_AutoIncremental PIVA2_UniqueIndex NomeAzienda2
    10 013 Azienda2
    11 014 Azienda3

    Eseguo la query:

    codice:
    INSERT INTO DB3 ( Id1, PIVA1, id2, PIVA2 )
    
    
    SELECT DB1.Id1, DB1.PIVA1, DB2.id2, DB2.PIVA2
    
    FROM DB3 
        RIGHT JOIN ( DB1 
            LEFT JOIN DB2 
                ON DB1.PIVA1 = DB2.PIVA2 ) 
            ON DB3.PIVA1 = DB1.PIVA1
    WHERE ((DB3.Id1) Is Null)
    ed ottengo la tabella non aggiornata:

    DB3
    SuperId_AutoIncremental Id1_UniqueIndex Id2 PIVA
    1 100 null 012
    2 101 10 013
    3 103 null 014

    invece di:
    DB3
    SuperId_AutoIncremental Id1_UniqueIndex Id2 PIVA
    1 100 null 012
    2 101 10 013
    3 103 11 014

    Mentre, se eseguo una semplice select, il risultato è corretto, e mi associa l'ultimo record inserito:
    codice:
    SELECT DB1.Id1, DB1.PIVA1, DB2.id2, DB2.PIVA2
    
    
    FROM   DB1 
           LEFT JOIN DB2 
              ON DB1.PIVA1 = DB2.PIVA2

  2. #2
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    è vero oltre all'INSERT devi fare anche un UPDATE
    codice:
    UPDATE 
    DB2 INNER JOIN DB3 ON DB2.PIVA2 = DB3.PIVA1 
    SET 
    DB3.Id2 = [DB2].[Id2], 
    DB3.PIVA2 = [DB2].[PIVA2]
    WHERE (((DB3.PIVA2) Is Null))
    __________________________________________________ ____________


    Quote Originariamente inviata da marco vee Visualizza il messaggio
    Mentre, se eseguo una semplice select, il risultato è corretto, e mi associa l'ultimo record inserito:
    codice:
    SELECT DB1.Id1, DB1.PIVA1, DB2.id2, DB2.PIVA2
    FROM   DB1 LEFT JOIN DB2 
    ON DB1.PIVA1 = DB2.PIVA2
    Certo, quella SELECT è il risultato finale che vuoi ottenere, ma ci sono delle complicazioni:

    Tu lo vuoi in una tabella quindi devi fare obbligatoriamente almeno 2 query ma potrebbereo anche essere di piu

    - La INSERT la abbiamo gia vista e ti inserisce i nuovi record di DB1
    - adesso hai anche la UPDATE per aggiornare i record di DB3 nel caso aggiungi in DB2 nuovi record
    - Poi ti mancheranno le Modifiche di record in DB1 ( sono forse escluse ?? )
    - Poi ancora le modifiche di record in DB2 ( sono forse escluse ?? )
    - Le eliminazioni in DB1 ( le hai gia escluse )
    - Le eliminazioni in DB2 ( anche queste le hai gia escluse )
    --- Non mi viene in mente altro

    __________________________________________________ _____________

    a questo punto io ripenserei a quel SuperId che metti in DB3, a cosa serve ??
    Perche se non ti serve a nulla allora sarebbe piu facile

    eliminare con DELETE i record difformi dalla tua select e lanciare solamente una INSERT

    oppure fare un DELETE massivo e rifare la INSERT massiva ( Di quanti record si tratta )

    oppure addirettura una SELECT ......... INTO DB3 FROM .............. che assomiglia moltissimo alla tua SELECT ma pero ti elimina e ricostruisce integralmente la tabella


    Ci sono molte soluzioni diverse in funzione dalla situazione
    la piu facile in assoluto è rinunciare alla Tabella DB3 e tenerti solo la SELECT che è sempre aggiornatissima in tempo reale


    .
    Ultima modifica di nman; 14-02-2014 a 01:40

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.