Problema JOIN SQL

Valerio Sparacio

Nuovo Utente
7 Feb 2014
23
0
0
Ciao, mi sto incartando su una (apparentemente) semplice JOIN.
Ho queste due tabelle e devo scrivere una query che mi trovi i contatti che NON sono nella lista di appartenenza.
Come esempio qui la lista con id 15 contiene gli id 8-9-10 quindi la query dovrebbe restituirmi 11-12-13.
Ho provato a scrivere questa query ma non và, potete dirmi dove sbaglio ?
Grazie mille.

select * from contatti join listecontatti on contatti.id=listecontatti.idcontatto where contatti.id<>listecontatti.idcontatto and listecontatti.idlista=15;


mysql> select * from contatti;
+----+-------+----------+------+------+------+---------+-------+------+
| id | nome | cognome | sms | voce | fax | twitter | email | ente |
+----+-------+----------+------+------+------+---------+-------+------+
| 8 | nome3 | cognome3 | NULL | NULL | NULL | NULL | NULL | NULL |
| 9 | nome4 | cognome5 | NULL | NULL | NULL | NULL | NULL | NULL |
| 10 | nome5 | cognome5 | NULL | NULL | NULL | NULL | NULL | NULL |
| 11 | nome6 | cognome6 | NULL | NULL | NULL | NULL | NULL | NULL |
| 12 | nome7 | cognome7 | NULL | NULL | NULL | NULL | NULL | NULL |
| 13 | nome8 | cognome8 | NULL | NULL | NULL | NULL | NULL | NULL |
+----+-------+----------+------+------+------+---------+-------+------+
6 rows in set (0.00 sec)

mysql> select * from listecontatti;
+----+------------+------------------+---------+
| id | idcontatto | idlistacollegata | idlista |
+----+------------+------------------+---------+
| 70 | 10 | -1 | 15 |
| 69 | 9 | -1 | 15 |
| 68 | 8 | -1 | 15 |
+----+------------+------------------+---------+
3 rows in set (0.00 sec)
 
Queste due tabelle quali?
Intanto scrivi ogni tabella con i propri campi e specifica con che relazione sono unite l'una con l'altra. Inserisci delle tuple di esempio e scrivi le 'tuple risultato' che vorresti ottenere.
 
Le describe sono queste, la relazione è contatti.id=listecontatti.idcontatto

mysql> describe contatti;
+---------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+---------------------+------+-----+---------+----------------+
| id | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| nome | varchar(70) | YES | MUL | NULL | |
| cognome | varchar(150) | YES | MUL | NULL | |
| sms | varchar(50) | YES | | NULL | |
| voce | varchar(50) | YES | | NULL | |
| fax | varchar(50) | YES | | NULL | |
| twitter | varchar(250) | YES | | NULL | |
| email | varchar(250) | YES | | NULL | |
| ente | varchar(300) | YES | MUL | NULL | |
+---------+---------------------+------+-----+---------+----------------+
9 rows in set (0.01 sec)

mysql> describe listecontatti;
+------------------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------------+---------------------+------+-----+---------+----------------+
| id | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| idcontatto | int(11) | YES | | NULL | |
| idlistacollegata | int(11) | NO | | -1 | |
| idlista | int(11) | YES | MUL | NULL | |
+------------------+---------------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)


Ciao, mi sto incartando su una (apparentemente) semplice JOIN.
Ho queste due tabelle e devo scrivere una query che mi trovi i contatti che NON sono nella lista di appartenenza.
Come esempio qui la lista con id 15 contiene gli id 8-9-10 quindi la query dovrebbe restituirmi 11-12-13.
Ho provato a scrivere questa query ma non và, potete dirmi dove sbaglio ?
Grazie mille.

select * from contatti join listecontatti on contatti.id=listecontatti.idcontatto where contatti.id<>listecontatti.idcontatto and listecontatti.idlista=15;


mysql> select * from contatti;
+----+-------+----------+------+------+------+---------+-------+------+
| id | nome | cognome | sms | voce | fax | twitter | email | ente |
+----+-------+----------+------+------+------+---------+-------+------+
| 8 | nome3 | cognome3 | NULL | NULL | NULL | NULL | NULL | NULL |
| 9 | nome4 | cognome5 | NULL | NULL | NULL | NULL | NULL | NULL |
| 10 | nome5 | cognome5 | NULL | NULL | NULL | NULL | NULL | NULL |
| 11 | nome6 | cognome6 | NULL | NULL | NULL | NULL | NULL | NULL |
| 12 | nome7 | cognome7 | NULL | NULL | NULL | NULL | NULL | NULL |
| 13 | nome8 | cognome8 | NULL | NULL | NULL | NULL | NULL | NULL |
+----+-------+----------+------+------+------+---------+-------+------+
6 rows in set (0.00 sec)

mysql> select * from listecontatti;
+----+------------+------------------+---------+
| id | idcontatto | idlistacollegata | idlista |
+----+------------+------------------+---------+
| 70 | 10 | -1 | 15 |
| 69 | 9 | -1 | 15 |
| 68 | 8 | -1 | 15 |
+----+------------+------------------+---------+
3 rows in set (0.00 sec)
 

Discussioni simili