MySQL Cross si unisce, ma senza coppia duplicata?
-
28-10-2019 - |
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.
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