Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di Bugu
    Registrato dal
    Nov 2007
    Messaggi
    871

    [access] Query aggiornamento

    Devo creare una query di aggiornamento (o forse di accodamento?) che prenda i record da una tabella e che li inserisca in un'altra tabella, ma solo se nell'altra tabella non esistono già.

    Esempio: ho TABELLA1 e TABELLA2
    Entrambe hanno un campo CODICE che è la chiave primaria (univoca)

    Devo prendere solo i record di TABELLA2 che già non siano presenti in TABELLA1 (quindi dove non sia già presente lo stesso CODICE in TABELLA1) ed aggiungerli a TABELLA1.

    Come posso fare?
    Thanks
    Linux User
    ---------
    Solo due cose sono infinite: l'universo e la stupidità umana, e non sono tanto sicuro della prima.

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Ho fatto una rapida prova su due tabelle contenenti due campi id e nome.

    Con una left join del genere trovi i record della tabella 2 che non hanno corrispondenza nella tabella1.

    codice:
    SELECT tabella2.nome
    FROM tabella2 LEFT JOIN Tabella1 ON tabella2.id=Tabella1.id
    WHERE Tabella1.id Is Null;
    Per aggiungere tali record alla tabella 1 devi usare il costrutto insert into select

    codice:
    INSERT INTO tabella1 ( nome )
    SELECT tabella2.nome
    FROM tabella2 LEFT JOIN Tabella1 ON tabella2.id=Tabella1.id
    WHERE Tabella1.id Is Null;
    Ovviamente nel tuo caso nella insert into dovrai specificare l'elenco di tutti i tuoi campi tranne l'id e altrettanto farai nella select dove io ho messo solo tabella2.nome.

    P.S. Ovviamente ti consiglio di fare le tue prove su una copia delle tabelle.

  3. #3
    Utente di HTML.it L'avatar di Bugu
    Registrato dal
    Nov 2007
    Messaggi
    871
    Originariamente inviato da nicola75ss
    Ho fatto una rapida prova su due tabelle contenenti due campi id e nome.

    Con una left join del genere trovi i record della tabella 2 che non hanno corrispondenza nella tabella1.

    codice:
    SELECT tabella2.nome
    FROM tabella2 LEFT JOIN Tabella1 ON tabella2.id=Tabella1.id
    WHERE Tabella1.id Is Null;
    Per aggiungere tali record alla tabella 1 devi usare il costrutto insert into select

    codice:
    INSERT INTO tabella1 ( nome )
    SELECT tabella2.nome
    FROM tabella2 LEFT JOIN Tabella1 ON tabella2.id=Tabella1.id
    WHERE Tabella1.id Is Null;
    Ovviamente nel tuo caso nella insert into dovrai specificare l'elenco di tutti i tuoi campi tranne l'id e altrettanto farai nella select dove io ho messo solo tabella2.nome.

    P.S. Ovviamente ti consiglio di fare le tue prove su una copia delle tabelle.
    Grazie, ma come li uso?
    Nel senso: creo una query e nel codice SQL inserisco ENTRAMBI i codici che mi hai postato?
    O creo 2 query ed eseguo prima una e poi l'altra?
    Linux User
    ---------
    Solo due cose sono infinite: l'universo e la stupidità umana, e non sono tanto sicuro della prima.

  4. #4
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Vai in visualizzazione sql e provi le query.

    La prima query è una semplice select e quindi non altera le due tabelle.

    La esegui soltanto per accertarti che i record estratti siano quelli che ti aspetti.
    In caso affermativo usi la seconda (dopo averla adattata al tuo contesto) che invece esegue l'accodamento alla tua tabella.

  5. #5
    Utente di HTML.it L'avatar di Bugu
    Registrato dal
    Nov 2007
    Messaggi
    871
    Non mi funziona, mi da una lista vuota
    Linux User
    ---------
    Solo due cose sono infinite: l'universo e la stupidità umana, e non sono tanto sicuro della prima.

  6. #6
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Questa query non ti restiutisce nulla?

    codice:
    SELECT tabella2.nome
    FROM tabella2 LEFT JOIN Tabella1 ON tabella2.id=Tabella1.id
    WHERE Tabella1.id Is Null;
    Hai adattato i nomi delle tabelle e dei campi al tuo contesto?
    La query è così, è un semplice left join. Su quello non ci piove.

  7. #7
    Utente di HTML.it L'avatar di Bugu
    Registrato dal
    Nov 2007
    Messaggi
    871
    Originariamente inviato da nicola75ss
    Questa query non ti restiutisce nulla?

    codice:
    SELECT tabella2.nome
    FROM tabella2 LEFT JOIN Tabella1 ON tabella2.id=Tabella1.id
    WHERE Tabella1.id Is Null;
    Hai adattato i nomi delle tabelle e dei campi al tuo contesto?
    La query è così, è un semplice left join. Su quello non ci piove.
    Ok, ora mi funziona. Mi ero incasinato io a scrivere il codice.
    Grazie
    Linux User
    ---------
    Solo due cose sono infinite: l'universo e la stupidità umana, e non sono tanto sicuro della prima.

  8. #8
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Se ti funziona il left join non avrai problemi nemmeno a integrarla nella query di inserimento. Prego.

  9. #9
    Utente bannato
    Registrato dal
    Apr 2009
    Messaggi
    13
    potrebbe usare l'update ma non so se in questo caso funge.

  10. #10
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Originariamente inviato da software-db
    potrebbe usare l'update ma non so se in questo caso funge.
    No, con l'update non può inserire nuovi record. Deve per forza usare una insert into select.

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.