combinaciones(no permutaciones) de unión cruzada en sql
self-join cross-join (1)
T as t1
inner join
T as t2
on t1.field < t2.field
FWIW, puedes usar INNER JOIN
para esto, no es estrictamente CROSS JOIN
. MySQL (y quizás algún otro RDBMS) trata estos dos tipos de unión como idénticos, pero en ANSI SQL, una unión cruzada no tiene una condición de unión, es un producto cartesiano deliberado.
Si tengo una tabla que me gustaría unir a sí misma, ¿cómo puedo eliminar las filas duplicadas? O para decirlo de otra manera, ¿cómo puedo hacer una combinación cruzada de "orden no importa"?
Así, por ejemplo, si tengo una tabla T:
field |
-------
A |
B |
C |
y cruzo unirme a si mismo para que no obtenga la A | Una fila
T as t1
cross join
T as t2
on t1.field != t2.field
Me gustaría obtener lo siguiente:
field | field
------+-------
A | B
A | C
B | A
B | C
C | A
C | B
Sin embargo, para mí A, B es lo mismo que B, A.
¿Hay una buena manera de eliminar estos duplicados? En otras palabras, quiero las combinaciones, no las permutaciones.