12 messaggi dal 15 agosto 2001
Salve a tutti.
Vi spiego il mio problema !!

Tramite select distinct ottengo N record composti da 2 campi : Matricola
Codice

ora vorrei inserire questi record in una altra tabella (che chiamero' app) solo se pero' il record non è già presente.
come posso fare ?
Le due tabelle hanno solo questi due campi.
Sono tutti e due interi e non vi è nessuna chiave identity.

spero di essere stato chiaro.

grazie.
1.976 messaggi dal 27 luglio 2005
Contributi
salve,
anflam ha scritto:
Salve a tutti.
Vi spiego il mio problema !!

Tramite select distinct ottengo N record composti da 2 campi : Matricola
Codice

ora vorrei inserire questi record in una altra tabella (che chiamero' app) solo se pero' il record non è già presente.
come posso fare ?
Le due tabelle hanno solo questi due campi.
Sono tutti e due interi e non vi è nessuna chiave identity.

spero di essere stato chiaro.

grazie.

puoi ad esempio utilizzare l'operatore (NOT) EXISTS come segue

SET NOCOUNT ON;
USE tempdb;
GO
CREATE TABLE test (
MAtricola int NOT NULL ,
Codice int NOT NULL
);
CREATE TABLE test2 (
MAtricola int NOT NULL ,
Codice int NOT NULL
);

INSERT INTO test VALUES ( 1 , 1 );
INSERT INTO test VALUES ( 1 , 1 );
INSERT INTO test VALUES ( 2 , 1 );
INSERT INTO test VALUES ( 2 , 1 );
INSERT INTO test VALUES ( 2 , 2 );
INSERT INTO test VALUES ( 2 , 2 );
INSERT INTO test VALUES ( 3 , 1 );
INSERT INTO test VALUES ( 3 , 1 );
INSERT INTO test VALUES ( 3 , 1 );
INSERT INTO test VALUES ( 3 , 2 );
INSERT INTO test VALUES ( 3 , 2 );
INSERT INTO test VALUES ( 3 , 2 );
INSERT INTO test VALUES ( 3 , 3 );
INSERT INTO test VALUES ( 3 , 3 );
INSERT INTO test VALUES ( 3 , 3 );
GO
SELECT DISTINCT Matricola, Codice FROM test;

INSERT INTO test2 VALUES ( 1 , 1 );
INSERT INTO test2 VALUES ( 2 , 2 );
INSERT INTO test2 VALUES ( 3 , 3 );
GO
PRINT 'selezione';
SELECT DISTINCT t.Matricola, t.Codice
FROM test t
WHERE NOT EXISTS(
SELECT * FROM test2
WHERE test2.Matricola = t.Matricola
AND test2.Codice = t.Codice);

PRINT '';
PRINT 'inserimento';
INSERT INTO test2
SELECT DISTINCT t.Matricola, t.Codice
FROM test t
WHERE NOT EXISTS(
SELECT * FROM test2
WHERE test2.Matricola = t.Matricola
AND test2.Codice = t.Codice);

SELECT Matricola, Codice FROM test2;

/* solo SQL 2005
PRINT 'selezione';
SELECT DISTINCT t.Matricola, t.Codice
FROM test t
EXCEPT
SELECT t2.Matricola, t2.Codice
FROM test2 t2;
PRINT '';
PRINT 'inserimento';
INSERT INTO test2
SELECT DISTINCT t.Matricola, t.Codice
FROM test t
EXCEPT
SELECT t2.Matricola, t2.Codice
FROM test2 t2;

SELECT Matricola, Codice FROM test2;
*/
GO
DROP TABLE test, test2;
--<---------------
selezione
Matricola Codice
----------- -----------
2 1
3 1
3 2


inserimento
Matricola Codice
----------- -----------
1 1
2 2
3 3
2 1
3 1
3 2

saluti

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.