Inserire dati in tabella .. senza fare duplicati

lunedì 03 marzo 2008 - 09.35

angie81 Profilo | Junior Member

devo scrivere una query che inserisca dei record in una tabella A (recuperandoli da una vista B) controllando però che il record presente nella vista non sia già stato copiato nella tabella A..

un aiutino?

amelix Profilo | Expert

Fai un JOIN tra la tabella A e la B e prendi quelli che non sono nella tabella A.

SELECT B.* FROM B LEFT JOIN A ON A.ID = B.ID WHERE A.ID IS NULL

OK?

Andrea - http://www.MelisWeb.eu/
CMS - http://www.WebOrama.it/

angie81 Profilo | Junior Member

se ho capito bene...

INSERT @tmp
(
[COD_PROGETTO],
[DESCRIZIONE_PROGETTO],
[USERID],
[PARTITA_IVA_COD_FISCALE],
[DES_USER],
[DES_INCARICO],
[ANNO],
[MESE],
[NUM_ORE],
[COSTO],
[DATA_MODIFICA],
[ID_INCARICO]
)
SELECT
[COD_PROGETTO],
[DESCRIZIONE_PROGETTO],
[USERID],
[PARTITA_IVA_COD_FISCALE],
[DES_USER],
[DES_INCARICO],
[ANNO],
[MESE],
[NUM_ORE],
[COSTO],
[DATA_MODIFICA],
[ID_INCARICO]

FROM
VEXPORT_GEDEO
LEFT JOIN
TBL_ESPORTA_GEDEO
ON
(
TBL_ESPORTA_GEDEO.COD_PROGETTO = VEXPORT_GEDEO.COD_PROGETTO
AND
TBL_ESPORTA_GEDEO.USERID = VEXPORT_GEDEO.USERID
AND
TBL_ESPORTA_GEDEO.ID_INCARICO = VEXPORT_GEDEO.ID_INCARICO
)
WHERE
(
mese BETWEEN @mese_da AND @mese_a
)
AND
(
anno BETWEEN @anno_a AND @anno_da
)

amelix Profilo | Expert

Sembra corretta... definisci anche la tabella del valorizza l'insert
>INSERT @tmp
>(
> [COD_PROGETTO],
> [DESCRIZIONE_PROGETTO],
> [USERID],
> [PARTITA_IVA_COD_FISCALE],
> [DES_USER],
> [DES_INCARICO],
> [ANNO],
> [MESE],
> [NUM_ORE],
> [COSTO],
> [DATA_MODIFICA],
> [ID_INCARICO]
>)
>SELECT
> VEXPORT_GEDEO.[COD_PROGETTO],
> [DESCRIZIONE_PROGETTO],
> [USERID],
> [PARTITA_IVA_COD_FISCALE],
> [DES_USER],
> [DES_INCARICO],
> [ANNO],
> [MESE],
> [NUM_ORE],
> [COSTO],
> [DATA_MODIFICA],
> [ID_INCARICO]
>
>FROM
>VEXPORT_GEDEO
>LEFT JOIN
>TBL_ESPORTA_GEDEO
>ON
>(
> TBL_ESPORTA_GEDEO.COD_PROGETTO = VEXPORT_GEDEO.COD_PROGETTO
> AND
> TBL_ESPORTA_GEDEO.USERID = VEXPORT_GEDEO.USERID
> AND
> TBL_ESPORTA_GEDEO.ID_INCARICO = VEXPORT_GEDEO.ID_INCARICO
>)
>WHERE
>(
>mese BETWEEN @mese_da AND @mese_a
>)
>AND
>(
>anno BETWEEN @anno_a AND @anno_da
>)

Andrea - http://www.MelisWeb.eu/
CMS - http://www.WebOrama.it/

angie81 Profilo | Junior Member

ti riferisci al @tmp?

nella mia query però io non ho inserito

WHERE A.ID IS NULL

amelix Profilo | Expert

No.
Nel senso che VEXPORT_GEDEO e TBL_ESPORTA_GEDEO avranno la stessa struttura.
Nel SELECT che popola l'insert tu hai messo solo il nome della colonna senza definire la fonte...
Per il resto sembra corretto.

Se NON metti "A.ID IS NULL" ti restituirà quelli che cisono già assieme a quelli che non hai...

A.
Andrea - http://www.MelisWeb.eu/
CMS - http://www.WebOrama.it/
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5