Domanda

Diciamo che ho la seguente riga nella mia tabella

Righe da tabella

id
63
64
65
66
67
68

Se eseguo la seguente query, ricevo 30 righe.

SELECT r1.id, r2,id 
  FROM rows AS r1 
    CROSS JOIN rows AS r2 
  WHERE r1.id!=r2.id

risultato:

63  64
65  64
66  64
67  64
68  64
64  63
65  63
66  63
67  63
68  63
63  65
64  65
66  65
67  65
68  65
63  66
64  66
65  66
67  66
68  66
63  67
64  67
65  67
66  67
68  67
63  68
64  68
65  68
66  68
67  68

Come avrei ottenuto il seguente risultato invece di quanto sopra?

63,64  
63,65   
63,66
63,67
63,68

64,65
64,66
64,67
64,68

65,66
65,67
65,68

66,67
66,68

67,68

Come vedi, non voglio ottenere sia 63,64 che 64,63, per esempio.

È stato utile?

Soluzione

Semplice, unisci solo valori più alti di quello attuale.

select r1.id, r2,id 
from rows r1 
cross join rows r2 
where r1.id < r2.id

Altri suggerimenti

Basta aggiungere una condizione. Lato sinistro per essere sempre più piccolo di quello a destra. Ciò eliminerà tutti i casi indesiderati.

select r1.id, r2,id from rows as r1 cross join rows as r2 where r1.id!=r2.id and r1.id <r2.id
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top