6 messaggi dal 17 maggio 2006
Salve ho un grosso prblema, ho fatto ho creato due tabella chiamiamo tabella1 e tabella2. poi ne ho creato una terza(tabella3) per vedere il delta tra la tabella 1 e 2.
adesso dovrei fare una nuova tabella in base a tutti i codice che ho dovato nella tabella delta, quanti ne provenengono dalla tabella 1 o 2 spero di essere stato chiaro, per favore aiutatemi
1.976 messaggi dal 27 luglio 2005
Contributi
salve,
pagineasp_nuove wrote:
Salve ho un grosso prblema, ho fatto ho creato due tabella chiamiamo tabella1 e tabella2. poi ne ho creato una terza(tabella3) per vedere il delta tra la tabella 1 e 2.
adesso dovrei fare una nuova tabella in base a tutti i codice che ho dovato nella tabella delta, quanti ne provenengono dalla tabella 1 o 2 spero di essere stato chiaro, per favore aiutatemi

non ho sinceramente capito cosa devi fare...
comunque, al di la' di cio', non e' necessario (a me no che tu non desideri persistere la cosa in una tabella) generare una "tabella" relativa ai delta tra una e l'altra tabella di origine, visto che puoi ottenere dinamicamente il risultato..

non indichi che dbms utilizzi, quindi io propongo un esempio che funziona su SQL Server, ma al di la' della metodologia di cancellazione di righe casuali, il principio di ottenimento del delta e' valido anche per altri dbms visto che la sintassi non e' proprietaria:

SET NOCOUNT ON;
USE tempdb;
GO
CREATE TABLE dbo.t1 (
Id int NOT NULL
);
CREATE TABLE dbo.t2 (
Id int NOT NULL
);
GO
DECLARE @i int;
SET @i = 1;
WHILE @i < 1000 BEGIN
INSERT dbo.t1 VALUES ( @i );
INSERT dbo.t2 VALUES ( @i );
SET @i = @i + 1;
END;
GO
DECLARE @cicle int;
SET @cicle = 1;
WHILE @cicle < 500 BEGIN
DELETE FROM dbo.t1 WHERE id = (round((rand() * 264), 0) + 1) DELETE FROM dbo.t2 WHERE id = (round((rand() * 264), 0) + 1) SET @cicle = @cicle + 1;
END;
GO
SELECT t1.id, t2.id,
CASE WHEN t1.id IS NULL THEN 't2'
WHEN t2.id IS NULL THEN 't1'
ELSE 't1+t2'
END AS [Origine]
FROM dbo.t1 t1
FULL OUTER JOIN dbo.t2 t2
ON t1.id = t2.id;
GO
DROP TABLE dbo.t1, dbo.t2;
--<-----
id id Origine
---------
---------
-------
1 NULL t1
3 NULL t1
....
272 272 t1+t2
273 273 t1+t2
....
NULL 94 t2
NULL 97 t2
....

inserite 1000 righe nelle tabelle dbo.t1 e dbo.t2, ne vengono cancellate "un po'" in maniera casuale..
il full outer join successivo ottiene sia le righe che abbiano una corrispondenza di [id] in entrambe le tabelle, che le righe senza corrispondenza, e quindi presenti in dbo.t1 ovvero in dbo.t2.. la verifica di dbo.t1.id IS NULL ti consente di evincere che la riga sara' presente solo in dbo.t2;
la verifica di dbo.t2.id IS NULL ti consente di evincere che la riga sara' presente solo in dbo.t1;
diversamente la riga sara' presente sia in dbo.t1 che dbo.t2.. 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.