Newsgroup: it.comp.software.database
Titolo: self join & mysql

Qualcuno sa se le self join sono non supportate o buggate su mysql?
Questa è la query, secondo me dovrebbe restituire semplicemente i clienti
con la stessa email.
select 
c1.id
, c1.nome, c1.cognome, c1.email
from clienti c1, clienti c2
where 
c1.id
 <> 
c2.id
and c1.email = c2.email
order by 
c1.id
 ASC
Questo è un pezzo di risultato (id è la PK)
id,nome,cognome,email,
91,Rudi,Da Padova,
te...@test.com
,
91,Rudi,Da Padova,
te...@test.com
,
1261,Rudi,Samuele,
te...@test.com
,
1261,Rudi,Samuele,
te...@test.com
,
1287,Test,Test,
te...@test.com
,
1287,Test,Test,
te...@test.com
,
Lo stesso record compare ripetuto 2 volte, anche 3 (non nell'estratto). 
La stessa query su postgres funziona come mi aspetterei.
-- 
Rd
"Siamo tutti nella stessa barca. Siamo comparse. Nullità.
 E faremo tutti una brutta fine. Esigenze di copione."

 ha scritto nel messaggio
news:slrnb2gquo...@parmenide.os...


con la stessa email.
Ho provato... la query l'ho riscritta ma mi sembra identica... il
risultato corretto. Ho inserito alcuni record per provare in una
tabella.
NB il trattino '|' fa sembrare il testo incollato come un quote.
---Cut
mysql> select * from em;
+----+-----------+------------------+
| id | nome      | email            |
+----+-----------+------------------+
|  1 | Luca      | 
lu...@test.com
    |
|  2 | Marco     | 
ma...@test.com
   |
|  3 | Claudio   | 
lu...@test.com
    |
|  4 | ClaudioBB | 
Cla...@test.com
 |
|  5 | Emanuele  | 
ma...@test.com
   |
+----+-----------+------------------+
5 rows in set (0.00 sec)
mysql> select 
a.id
, a.nome, a.email from em as a, em as b where
a.email=b.email
and 
a.id
 <> 
b.id
;
+----+----------+----------------+
| id | nome     | email          |
+----+----------+----------------+
|  3 | Claudio  | 
lu...@test.com
  |
|  5 | Emanuele | 
ma...@test.com
 |
|  1 | Luca     | 
lu...@test.com
  |
|  2 | Marco    | 
ma...@test.com
 |
+----+----------+----------------+
4 rows in set (0.00 sec)
mysql>
-- 
Per una pera, una pera cazzo...

where 
c1.id
 = 
c2.id
in quel caso riporterebbe l'intero recordset, invece lui vuole quelli
con la stessa email che *non* siano la stessa persona (che non abbiano
lo stesso ID dunque).


con la stessa email.
o anche:
mysql> select a.email, count(
a.id
) as conta from em as a, em as b
where a.email=
b.email and 
a.id
<>
b.id
 group by a.email order by conta desc;
+----------------+-------+
| email          | conta |
+----------------+-------+
| 
lu...@test.com
  |     2 |
| 
ma...@test.com
 |     2 |
+----------------+-------+
2 rows in set (0.00 sec)


 tabella.
Infatti, anche a me sembra che la query sia corretta e il fatto che  ti
funzioni significa che il self join è supportato.
Devo aggiungere che i risultati comlpleti sul db su cui lavoro - ho postato solo un 
estratto - sono veramente bizzarri. Non tutti i record vengono riportati
più volte: alcuni vengono riportati una volta, altri 2 3 o 4 volte ...
La tabella contiene circa 2000 record e non sono certo che una prova su una
tabella con una decina di record faccia testo, nel senso che la stranezza
dei risultati mi fa pensare a qualche bug. Un'altra spiegazione è che
quella tabella abbia qualcosa che non va. Proverò a fare dei controlli (è
mysql 3.22 su freeBSD)
-- 
Rd
"Anche il suo silenzio sconcertava la gente, ma per lui il linguaggio era un
mezzo di comunicazione difettoso, quindi preferiva usare bandierine di
segnalazione anche per i colloqui più intimi"

 mysql 3.22 su freeBSD)
Boh, nada. isamchk non rileva niente di strano. 
-- 
Rd
"Una pipa da' al saggio tempo per riflettere,
 all'idiota qualcosa da mettere in bocca."