Query di inserimento

di il
4 risposte

Query di inserimento

Ciao a tutti.
Qualcuno mi saprebbe dire come posso inserire dei record generati da una query in una tabella, ma solo se non sono già contenuti in questa tabella?
il codice che ho creato è questo:
INSERT INTO tabC ( id )
SELECT UnionT.id AS id
FROM (select [tabA@ve].id from [tabA@ve] UNION select [tabB@ve].id from [tabB@ve])  AS UnionT LEFT JOIN tabC ON UnionT.id = tabC.Id
GROUP BY UnionT.id;
In sostanza ho creato 2 query (tabA@ve e tabB@ve) che tramite il comando UNION recuperano solo i record non ripetuti "id". Da questa unione è generata la tabella UnionT che dovrebbe confrontarsi tramite LEFT JOIN (quindi unendo solo i campi nuovi e non quelli già presenti) alla tabella tabC e salvare questa tabC con i soli record nuovi.
La prima parte viene eseguita correttamente. Dove non funziona è sul fatto che i nuovi record sono aggiunti a tabC anche se già presenti...
scusate se non sono stato chiaro e grazie!!!!

4 Risposte

  • Re: Query di inserimento

    galantik ha scritto:


    ...Da questa unione è generata la tabella UnionT che dovrebbe confrontarsi tramite LEFT JOIN (quindi unendo solo i campi nuovi e non quelli già presenti) alla tabella tabC e salvare questa tabC con i soli record nuovi....
    LEFT JOIN include tutti record della prima tabella (quella di sinistra) anche se non vi sono valori corrispondenti ai record della seconda tabella (quella di destra). Quindi il risultato di
    UnionT LEFT JOIN tabC ON UnionT.id = tabC.Id
    sarà "tutti i record di UnionT" (non solo quelli che non trovano corrispondenza in tabC). Di conseguenza tutti gli ID di UnionT saranno inseriti in TabC a seguito di
    INSERT INTO tabC ( id )
    SELECT UnionT.id AS id FROM...
    (a meno che non ci siano violazioni di chiave primaria o indice duplicati non ammessi su TabC.ID)
    A che serve il GROUP BY UnionT.id? In generale tutta la query ha "poco senso", forse perché semplificata eccessivamente a titolo di esempio?

    galantik ha scritto:


    ......Da questa unione è generata la tabella UnionT...
    Occhio che UnionT è una "tabella derivata" non una "tabella in senso stretto"
    PS: dopo i nomi dei campi con gli spazi, ora il nome delle tabelle con la chiocciola.
  • Re: Query di inserimento

    Chiarito quanto sopra, proseguo:

    galantik ha scritto:


    Ciao a tutti.
    Qualcuno mi saprebbe dire come posso inserire dei record generati da una query in una tabella, ma solo se non sono già contenuti in questa tabella?
    Nella Creazione guidata query c'è la creazione guidata Query ricerca dati non corrispondenti. Creane una di prova su due tabelle semplici. Guarda come funziona e cerca di riportarne "il principio" nella query di inserimento che ti interessa. Credo che ci sarà da smanovrare parecchio in visualizzazione SQL e poco in QBE.
  • Re: Query di inserimento

    Ci devo lavorare su un pochino.....eventualmente spaccherò la Query in due diverse perché cosi non mi sembra proprio facilmente risolvibile.
    Per quanto riguarda gli spazi e le chiocciole, le ho tolte dappertutto! faccio tesoro dei tuoi insegnamenti.
    In effetti il Group by non serviva a nulla, quindi l'ho tolto senza compromettere la funzionalità della query.
  • Re: Query di inserimento

    galantik ha scritto:


    Ci devo lavorare su un pochino.....
    ma proprio pochino pochino, guarda che non è così difficile (vedrai, ti morderai le dita)

    galantik ha scritto:


    ....eventualmente spaccherò la Query in due diverse perché cosi non mi sembra proprio facilmente risolvibile...
    ma evenutalmente solo per analizzarne il comportamento e poi poterle inserire in un'unico predicato sql.

    galantik ha scritto:


    Per quanto riguarda gli spazi e le chiocciole, le ho tolte dappertutto! faccio tesoro dei tuoi insegnamenti.
    già i problemi sono dietro l'angolo, sempre. Almeno cerchiamo di non dar loro ulteriori motivi per spuntare
Devi accedere o registrarti per scrivere nel forum
4 risposte