>non so se è possibile ma vi pongo questo quesito prima di inziare
>a scrivere il codice che lo fa!
Ciao gmt,
Quando posti un quesito è opportuno specificare il DBMS utilizzato.
Io ti proporrò una soluzione per SQL Server.
Quello di cui hai bisogno è di una FULL OUTER JOIN, ovvero una particolare OUTER JOIN che considera tutte le righe di entrambe le tabelle, indipendentemente dal match tra le colonne specificate nella clausola ON:
USE tempdb;
GO
CREATE TABLE dbo.Tabella1(
Codice tinyint NOT NULL PRIMARY KEY,
Valore1 tinyint NOT NULL,
Valore2 tinyint NOT NULL
);
GO
CREATE TABLE dbo.Tabella2(
Codice tinyint NOT NULL PRIMARY KEY,
Valore1 tinyint NOT NULL,
Valore2 tinyint NOT NULL
);
GO
INSERT dbo.Tabella1 VALUES(12, 100, 200);
INSERT dbo.Tabella1 VALUES(17, 87, 56);
INSERT dbo.Tabella1 VALUES(21, 178, 167);
INSERT dbo.Tabella2 VALUES(12, 103, 230);
INSERT dbo.Tabella2 VALUES(17, 82, 55);
INSERT dbo.Tabella2 VALUES(19, 12, 45);
GO
SELECT
COALESCE(T1.Codice, T2.Codice) AS Codice
, T1.Valore1
, T1.Valore2
, T2.Valore1
, T2.Valore2
FROM dbo.Tabella1 AS T1
FULL JOIN dbo.Tabella2 AS T2
ON T1.Codice = T2.Codice;
GO
/* Output:
Codice Valore1 Valore2 Valore1 Valore2
------ ------- ------- ------- -------
12 100 200 103 230
17 87 56 82 55
19 NULL NULL 12 45
21 178 167 NULL NULL
(4 row(s) affected)
*/
DROP TABLE dbo.Tabella1, dbo.Tabella2;
Come puoi notare ho utilizzato la funzione COALESCE per valorizzare la colonna Codice anche nel caso in cui T1.Codice sia NULL (caso che si verifica quando vengono prese le righe di T2 non presenti in T1).
Per maggiori dettagli leggi i seguenti paragrafi dei Books Online:
"Using Outer Joins"
http://msdn2.microsoft.com/en-us/library/ms187518.aspx
"COALESCE (Transact-SQL)"
http://msdn2.microsoft.com/en-US/library/ms190349.aspx
>Grazie
Prego.
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org