sql self-join cross-join

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.