Ver Mensaje Individual
  #4 (permalink)  
Antiguo 21/05/2012, 13:58
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 18 años
Puntos: 447
Respuesta: Crear tabla en base a tabla existente

Hola plantala:

No entiendo muy bien para qué te serviría esto pero bueno, esa es otra cuestión... Una forma para hacer esto sería aplicar el concepto de PRODUCTO CARTESIANO entre tablas... en un producto cartesiano la idea es combinar todos los elementos de una tabla contra todos y cada uno de los elementos de otra tabla... es decir, obtener todas las combinaciones posibles... Para el ejemplo creé tres tablas con los 5 valores posibles que puede tomar, es decir algo como esto:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tablaA;
  2. +-------+
  3. | campo |
  4. +-------+
  5. | 1     |
  6. | 2     |
  7. | 3     |
  8. | 4     |
  9. | 5     |
  10. +-------+
  11. 5 rows in set (0.00 sec)
  12.  
  13. mysql> SELECT * FROM tablaB;
  14. +-------+
  15. | campo |
  16. +-------+
  17. | 1     |
  18. | 2     |
  19. | 3     |
  20. | 4     |
  21. | 5     |
  22. +-------+
  23. 5 rows in set (0.00 sec)
  24.  
  25. mysql> SELECT * FROM tablaC;
  26. +-------+
  27. | campo |
  28. +-------+
  29. | 1     |
  30. | 2     |
  31. | 3     |
  32. | 4     |
  33. | 5     |
  34. +-------+
  35. 5 rows in set (0.00 sec)

Ahora bien, al hacer hacer un producto cartesiano entre las tres tablas obtengo todas las combinaciones posibles... para evitar los registros "duplicados" es decir (1,2,3)(2,1,3)(3,1,2)... o combinaciones como estas (1,1,1)(2,2,2)... lo que hago es hacer que A siempre sea mayor a B y B siempre sea mayor a C

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tablaA, tablaB, tablaC
  2.     -> WHERE tablaA.campo < tablaB.campo
  3.     -> AND tablaB.campo < tablaC.campo
  4.     -> ORDER BY tablaA.campo, tablaB.campo, tablaC.campo;
  5. +-------+-------+-------+
  6. | campo | campo | campo |
  7. +-------+-------+-------+
  8. | 1     | 2     | 3     |
  9. | 1     | 2     | 4     |
  10. | 1     | 2     | 5     |
  11. | 1     | 3     | 4     |
  12. | 1     | 3     | 5     |
  13. | 1     | 4     | 5     |
  14. | 2     | 3     | 4     |
  15. | 2     | 3     | 5     |
  16. | 2     | 4     | 5     |
  17. | 3     | 4     | 5     |
  18. +-------+-------+-------+
  19. 10 rows in set (0.00 sec)

No se si esto es lo que querías obtener, dale un vistazo y nos comentas si te sirvió.

saludos
Leo.