Newsgroup: it.comp.software.database
Titolo: Estrarre i dati non comuni

Salve a tutti ho un piccolo problema con una query di interrogazione
tra 2 tabelle in un DB in MySql
Le 2 tabelle hanno un campo ID unico, ed ho bisogno di estrarre da una
delle 2 tabelle gli elementi non comuni.
Ora usando il camando JOIN si riesce ad estrarre gli elementi comuni,
ma non riesco a fare la procedura inversa, come si fa?
grazie

 ma non riesco a fare la procedura inversa, come si fa?
devi fare un left-join tra i due campi ID e filtrare i record per cui in 
una delle 2 tabelle tale ID=NULL.
poi unisci il risultato con la stessa query ma con il right-join e 
filtrando quelli in cui nell'altra tabella ID=NULL.
fai alcune prove per il left-join, non ricordo i dettagli su come 
funziona ma li trovi sul manuale mysql (cerca LEFT JOIN).
ciao :-)
-- 
Denetor




Ti servirebbe l'operatore di EXCEPT definito per ANSI-SQL92 o
qualche cosa di simile (MINUS ad esempio).
Non so dirti se MySql supporta qualcosa di simile, SQL Server no
e ieri qualcuno chiedeva come fare, prova a dare uno sguardo a
questo thread per vedere se ti puo' essere di aiuto:
http://groups.google.com/groups?selm=uyXlegnqEHA.4004%40TK2MSFTNGP10.phx.gbl&output=gplain
Ciao,
-- 
Gianluca Hotz - SQL Server MVP
http://italy.mvps.org
 - 
http://www.solidqualitylearning.com
http://www.ugiss.org
  - 
http://www.ugidotnet.org
http://www.ghotz.com
  - 
http://blogs.ugidotnet.org/ghotz

"Francesco" <kfran...@NO-SPAMlycos.it> ha scritto nel messaggio
news:25q5m055p9kmclbmo...@4ax.com...

Prova cosě:
mysql> create table prova1(id1 int primary key, testo1 varchar(255));
Query OK, 0 rows affected (0.02 sec)
mysql> create table prova2(id2 int primary key, testo2 varchar(255));
Query OK, 0 rows affected (0.00 sec)
mysql> insert into prova1 values(1,'Pippo');
Query OK, 1 row affected (0.00 sec)
mysql> insert into prova1 values(2,'Pluto');
Query OK, 1 row affected (0.00 sec)
mysql> insert into prova1 values(3,'Paperino');
Query OK, 1 row affected (0.00 sec)
mysql> insert into prova2 values(1,'Pippo');
Query OK, 1 row affected (0.00 sec)
mysql> insert into prova2 values(2,'Minnie');
Query OK, 1 row affected (0.00 sec)
mysql> insert into prova2 values(4,'Topolino');
Query OK, 1 row affected (0.00 sec)
mysql> select * from prova1 left join prova2 on id1 = id2 where id2 is null;
+-----+----------+------+--------+
| id1 | testo1   | id2  | testo2 |
+-----+----------+------+--------+
|   3 | Paperino | NULL | NULL   |
+-----+----------+------+--------+
1 row in set (0.01 sec)
mysql> select * from prova2 left join prova1 on id2 = id1 where id1 is null;
+-----+----------+------+--------+
| id2 | testo2   | id1  | testo1 |
+-----+----------+------+--------+
|   4 | Topolino | NULL | NULL   |
+-----+----------+------+--------+
1 row in set (0.00 sec)
Se poi fai la UNION (permettendotelo la versione di MySQL che usi) fra le
due query hai esattamente tutti gli elementi che stanno in una sola delle
due tabelle.
Ciao!


Grazie a tutti per le risposte.

 
Puoi anche fare
SELECT *
FROM PROVA1 A
WHERE NOT EXISTS (SELECT 1
                  FROM PROVA2 B
                  WHERE 
A.ID
 = 
B.ID
 )
UNION ALL 
SELECT *
FROM PROVA2 A
WHERE NOT EXISTS (SELECT 1
                  FROM PROVA1 B
                  WHERE 
A.ID
 = 
B.ID
 )