SQL - con SQL desde cada registro de una tabla generar varios registros en otra

 
Vista:
sin imagen de perfil

con SQL desde cada registro de una tabla generar varios registros en otra

Publicado por Francisco Castro (4 intervenciones) el 03/06/2018 19:53:32
Hola buenas tardes, soy nuevo en el foro y nuevo en el manejo de SQL hasta ahora me he manejado y me manejo perfectamente con VFPRO pero necesito hacer lo siguiente con comando SQL puros que voy a utilizar en el editor de script del programa Qlickview.
Dispongo de una tabla con los campos c1,c2,c3,c4,c5,c6,c7,c8,c9 y c10 y quiero a partir de esta generar o completar otra tabla con los campos c1,c2,c3,c4,c5,c6,,d1,d2 donde por cada registro de la primera tabla se tienen que generar 4 registro en la segunda los cuatro contendrán los campos c1,c2,c3,c4,c5,c6 de la primera pero en el ;
a) primer registro en el campo d1 se debe introducir el contenido de c7 y en el campo d2 el nombre del campo c7
b) segundo registro en d1 el contenido de c8 y en d2 el nombre del campo c8
c) tercer registro en d1 el contenido de c9 y en d2 el nombre del campo c9
d) cuarto registro en d1 el contenido de c10 y en d2 el nombre del campo c10
Por VFPRO ya lo he realizado pero necesito hacerlo con ordenes SQL así que si hay alguien tan amable de mandarme el procedimiento para hacerlo le estaría muy agradecido.
Nota los campos d2 son cadenas de caracteres conocidas así que se puede sustituir el meterles el nombre de los campos c7,c8,c9,c10 por unas determinadas cadenas de caracteres eso si distintas.
Muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

con SQL desde cada registro de una tabla generar varios registros en otra

Publicado por leonardo_josue (1173 intervenciones) el 04/06/2018 18:46:31
Hola Francisco:

No se si he entendido pero veamos si esto te sirve. Supongamos que tienes estos datos en tu tabla:

1
2
3
4
5
6
7
8
9
10
mysql> SELECT * FROM tabla;
+------+------+------+------+------+------+------+------+------+------+
| c1   | c2   | c3   | c4   | c5   | c6   | c7   | c8   | c9   | c10  |
+------+------+------+------+------+------+------+------+------+------+
|    1 |    1 |    1 |    1 |    1 |    1 |   10 |   11 |   12 |   13 |
|    2 |    2 |    2 |    2 |    2 |    2 |   20 |   21 |   22 |   23 |
|    3 |    3 |    3 |    3 |    3 |    3 |   30 |   31 |   32 |   33 |
|    4 |    4 |    4 |    4 |    4 |    4 |   40 |   41 |   42 |   43 |
+------+------+------+------+------+------+------+------+------+------+
4 rows in set (0.00 sec)

Entonces, si entendí bien, lo que necesitas lo puedes hacer con UNION'S, más o menos así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
mysql> SELECT c1, c2, c3, c4, c5, c6, c7 d1, 'c7' d2 FROM tabla
    -> UNION ALL
    -> SELECT c1, c2, c3, c4, c5, c6, c8 d1, 'c8' d2 FROM tabla
    -> UNION ALL
    -> SELECT c1, c2, c3, c4, c5, c6, c9 d1, 'c9' d2 FROM tabla
    -> UNION ALL
    -> SELECT c1, c2, c3, c4, c5, c6, c10 d1, 'c10' d2 FROM tabla;
+------+------+------+------+------+------+------+-----+
| c1   | c2   | c3   | c4   | c5   | c6   | d1   | d2  |
+------+------+------+------+------+------+------+-----+
|    1 |    1 |    1 |    1 |    1 |    1 |   10 | c7  |
|    2 |    2 |    2 |    2 |    2 |    2 |   20 | c7  |
|    3 |    3 |    3 |    3 |    3 |    3 |   30 | c7  |
|    4 |    4 |    4 |    4 |    4 |    4 |   40 | c7  |
|    1 |    1 |    1 |    1 |    1 |    1 |   11 | c8  |
|    2 |    2 |    2 |    2 |    2 |    2 |   21 | c8  |
|    3 |    3 |    3 |    3 |    3 |    3 |   31 | c8  |
|    4 |    4 |    4 |    4 |    4 |    4 |   41 | c8  |
|    1 |    1 |    1 |    1 |    1 |    1 |   12 | c9  |
|    2 |    2 |    2 |    2 |    2 |    2 |   22 | c9  |
|    3 |    3 |    3 |    3 |    3 |    3 |   32 | c9  |
|    4 |    4 |    4 |    4 |    4 |    4 |   42 | c9  |
|    1 |    1 |    1 |    1 |    1 |    1 |   13 | c10 |
|    2 |    2 |    2 |    2 |    2 |    2 |   23 | c10 |
|    3 |    3 |    3 |    3 |    3 |    3 |   33 | c10 |
|    4 |    4 |    4 |    4 |    4 |    4 |   43 | c10 |
+------+------+------+------+------+------+------+-----+
16 rows in set (0.01 sec)

El ejemplo lo hago con MySQL, pero debería de funcionar para cualquier otro DBMS... haz la prueba y nos comentas.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

con SQL desde cada registro de una tabla generar varios registros en otra

Publicado por Francisco Castro (4 intervenciones) el 04/06/2018 19:01:10
Como es la primera vez que utilizo el foro no se bien si he votado correctamente yo quería dar la máxima puntuación pero ha salido un 1 y ya no me deja hacer nada. Muchas gracias por la respuesta creo que es exactamente lo que necesito y ademas para mysql.
Gracias de nuevo..
Yo después de mucho ensayo error lo había conseguido utilizando Insert ---- y Update-- tantas veces como dimensiones quiero unir en una . en este caso 4 veces, pero queda bastante mas elegante tu solución.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

con SQL desde cada registro de una tabla generar varios registros en otra

Publicado por Francisco Castro (4 intervenciones) el 06/06/2018 02:34:49
Hola Leonardo
Acabo de probar tu respuesta y el resultado es que si tenia 6000 registros siempre me quedan los mismos, lo único que hace en cada proceso es cambiar el titulo del campo c7 c8 c9 y c10 por el d1 y meter su contenido en d2, pero no añade cada vez 6000 registros sino que modifica los anteriores, el resultado final es que solo queda los datos del último, es decir hace un UPDATE en lugar de un INSERT seguro que habrá alguna variante que añada en lugar de modificar.
Yo lo he resuelto creando una tabla vacia con los campos que deseo es decir siguiendo tu ejemplo c1......c6,d1,d2
Hago un INSERT desde la tabla principal a esa y le paso a d2 el contenido de c7
Hago un UPDATE y modifico el contenido de d2 con el nombre del campo c7
Repito este proceso para los campos c8,c9 y c10
El resultado es correcto los registros se multiplican por 4...aunque un poco tosco pero es que llevo una semana con el SQL seguro que me puedo ahorrar el UPDATE y en la misma orden INSERT pasarle al campo d2 el nombre del campo c7.
De todas formas gracias por tu contestación ya que he aprendido un nuevo comando UNION aunque me gustaría aclarar que hace exactamente la instrucción , c7 d1, y ,"c7" d2,
Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

con SQL desde cada registro de una tabla generar varios registros en otra

Publicado por Francisco Castro (4 intervenciones) el 06/06/2018 03:13:27
Hola Leonardo, acabo de comprender y comprobar, gracias a tu respuesta, que me sobra el UPDATE, he cambiado el código y queda asi:
INSERT INTO tablavacia (c1,c2,c3,c4,c5,c6,d1,d2) SELECT c1,c2,c3,c4,c5,c6,c7,"c7" d2 FROM tablaprincipalcondatos;
Repito la orden cambiando c7 por c8,c9 y c10 y el resultado es que en la tablavacia tengo los registros que quería es decir los de la tablaprincipal por 5 y con los campos d1 y d2 correctos.
Gracias porque lo he deducido de tu respuesta en la parte de , "c7" d2,
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar