Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Crear tabla en base a tabla existente

Estas en el tema de Crear tabla en base a tabla existente en el foro de Bases de Datos General en Foros del Web. Buenas. Tengo una tabla, la cual tiene cinco campos numericos, A,B,C,D y E. Pues bien, yo quiero crear otra tabla la cual tenga 3 campos ...
  #1 (permalink)  
Antiguo 21/05/2012, 03:17
Avatar de plantala  
Fecha de Ingreso: abril-2008
Ubicación: Jamaica
Mensajes: 176
Antigüedad: 16 años
Puntos: 1
Crear tabla en base a tabla existente

Buenas.
Tengo una tabla, la cual tiene cinco campos numericos, A,B,C,D y E. Pues bien, yo quiero crear otra tabla la cual tenga 3 campos y que los datos los coja de la tabla existente. Ahora explico como quiero utilizar esos datos.

Si en la primera tabla, los valores de la primera fila son estos: A=1,B=2,C=3,D=4,E=5, la tabla nueva deberia de quedar asi:

1-2-3
1-2-4
1-2-5
1-3-4
1-3-5
1-4-5

Es decir, que hago todas las combinaciones posibles entre ellas.

Una vez creada la nueva tabla, me gustaria ordenar todas las filas de menor a mayor, aunque eso con una consulta tambien se podra hacer.
No se si he explicado bien lo que pretendo hacer, pero si lo entendeis, agradeceria vuestra ayuda.

Gracias de antemano.
Un saludo!
__________________
"Independizate de la esclavitud mental; tan solo nosotros mismos podemos liberar nuestra mente"-Bob Marley
  #2 (permalink)  
Antiguo 21/05/2012, 08:29
Avatar de plantala  
Fecha de Ingreso: abril-2008
Ubicación: Jamaica
Mensajes: 176
Antigüedad: 16 años
Puntos: 1
Respuesta: Crear tabla en base a tabla existente

Se me ha olvidado, pero en la nueva tabla, aparte de los resultados que he puesto faltan las siguientes combinaciones:

2-3-4
2-3-5
2-4-5
3-4-5
__________________
"Independizate de la esclavitud mental; tan solo nosotros mismos podemos liberar nuestra mente"-Bob Marley
  #3 (permalink)  
Antiguo 21/05/2012, 10:33
Avatar de plantala  
Fecha de Ingreso: abril-2008
Ubicación: Jamaica
Mensajes: 176
Antigüedad: 16 años
Puntos: 1
Respuesta: Crear tabla en base a tabla existente

He realizado una consulta por cada una de las 10 combinaciones posibles, pero ahora lo que quiero hacer es realizar una consulta para poder agrupar todas ellas en una.
Es posible hacer esto?

Las consultas que he hecho yo son muy sencillas, por poner un ejemplo, para la primera combinacion he hecho la siguiente consulta:

Cita:
SELECT a,b,c
FROM tabla
ORDER BY a,b,c;
Alguien me podria echar una mano?

Un saludo!
__________________
"Independizate de la esclavitud mental; tan solo nosotros mismos podemos liberar nuestra mente"-Bob Marley
  #4 (permalink)  
Antiguo 21/05/2012, 13:58
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
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.

Etiquetas: existente, tabla, campos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:43.