SQL - Crear una tabla a partir de otras dos

   
Vista:

Crear una tabla a partir de otras dos

Publicado por Zunea (5 intervenciones) el 15/05/2013 02:13:21
Hola a todos y gracias de antemano.
Tengo el siguiente código:

SELECT
*
INTO prueba
FROM
p1,p2

resulta que en p1 tengo 6 registros y en p2 también solo tengo 6 registros, pero me arroja un resultado de 36, es decir, crea la tabla prueba con 36 registros... como que multiplica 6 x 6 o algo así.

En fin lo que quiero y necesito es que la tabla prueba se cree con 6 registros únicamente pero me una los campos de ambas tablas con su respectiva información....

Haaa y la información de ambas tablas no esta relacionada por ningún campo ...

Les agradezco si me pueden ayudar con este tema.
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
Imágen de perfil de xve

Crear una tabla a partir de otras dos

Publicado por xve (238 intervenciones) el 15/05/2013 07:48:54
Hola Zunea, cuando te genera 36 registros, se repiten todos los registros 6 veces?

Has probado a hacerlo por separado? algo así:
SELECT
*
INTO prueba
FROM p1

SELECT
*
INTO prueba
FROM p2

Coméntanos, ok?
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

Crear una tabla a partir de otras dos

Publicado por Zunea (5 intervenciones) el 15/05/2013 14:45:31
Gracias por tu sugerencia XVE, pero si lo hago por separado, la primera la ejecuta bien, pero la segunda me dice que la tabla ya esta creada.... y necesito es que se junten los campos de ambas tablas en una sola...

Tienes alguna otra idea?

O cómo podría adicionar los otros campos una vez ejecuto la primera...

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
Imágen de perfil de xve

Crear una tabla a partir de otras dos

Publicado por xve (238 intervenciones) el 15/05/2013 15:52:23
Haber si te funciona así:
1
2
3
4
5
6
7
8
9
10
select *
INTO prueba
from
    (SELECT
    *
    FROM p1) s1,
    (SELECT
    *
    INTO prueba
    FROM p2) s2

Que motor de base de datos estas utilizando?
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

Crear una tabla a partir de otras dos

Publicado por Zunea (5 intervenciones) el 15/05/2013 16:00:32
Creo que la sugerencia tuya es :

select *
INTO prueba
from
(SELECT * FROM productosso1) s1,(SELECT * FROM productosso2) s2

Pero crea 36 registros. Debe ser porque los toma individuales, pues no existe relación alguna entre ellos.

Gracias por tu ayuda, pero sigo sin resolver el problema.

Haaa y estoy usando SQL Server Management
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

Crear una tabla a partir de otras dos

Publicado por leonardo_josue (878 intervenciones) el 15/05/2013 16:23:34
Hola Zunea:

Lo que está sucediendo se llama PRODUCTO CARTESIANO, y efectivamente es como una "multiplicación" de los registros de tus tablas. El problema es que no estás especificando cómo se están relacionando tus dos tablas, checa este script:

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
29
30
31
32
33
34
35
mysql> select * from tabla1;
+------+-------------+
| id   | descripcion |
+------+-------------+
|    1 | uno         |
|    2 | dos         |
|    3 | tres        |
+------+-------------+
3 rows in set (0.46 sec)
 
mysql> select * from tabla2;
+------+-------------+
| id   | descripcion |
+------+-------------+
|    1 | one         |
|    2 | two         |
|    3 | three       |
+------+-------------+
3 rows in set (0.06 sec)
 
mysql> select * from tabla1, tabla2;
+------+-------------+------+-------------+
| id   | descripcion | id   | descripcion |
+------+-------------+------+-------------+
|    1 | uno         |    1 | one         |
|    2 | dos         |    1 | one         |
|    3 | tres        |    1 | one         |
|    1 | uno         |    2 | two         |
|    2 | dos         |    2 | two         |
|    3 | tres        |    2 | two         |
|    1 | uno         |    3 | three       |
|    2 | dos         |    3 | three       |
|    3 | tres        |    3 | three       |
+------+-------------+------+-------------+
9 rows in set (0.00 sec)


Esto es exactamente lo que está pasando con tu consulta, es por eso que el resultado son 36 registros (6 registros de la tabla1 X 6 registros de la tabla2). Lo que tienes que hacer es especificar cómo están relacionadas estas dos tablas, de tal manera que la consulta queda más o menos así:

1
2
3
4
5
6
7
8
9
mysql> select * from tabla1 inner join tabla2 on tabla1.id = tabla2.id;
+------+-------------+------+-------------+
| id   | descripcion | id   | descripcion |
+------+-------------+------+-------------+
|    1 | uno         |    1 | one         |
|    2 | dos         |    2 | two         |
|    3 | tres        |    3 | three       |
+------+-------------+------+-------------+
3 rows in set (0.02 sec)


Una vez que hagas eso, entonces si puedes hacer el INTO a tu nueva tabla.

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

Crear una tabla a partir de otras dos

Publicado por zunea (5 intervenciones) el 15/05/2013 16:34:14
Gracias Leo, pero las tablas efectivamente no estan relacionadas.

Mira lo que tengo y lo que pretendo:

tabla P1:
Id Description Cost
1 XXXXXXXX $$$$

Tabla P2:
Tax Stock Name
%% UUU ZZZZZ

Necesito una tercer tabla:

Table P3 (p1+p2)

Id Description Cost Tax Stock Name
1 XXXXXXXX $$$$ %% UUU ZZZZZ

Como ves las tablas no están relacionadas, pues tienen diferentes campos.

gracias por las sugerencias.
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

Crear una tabla a partir de otras dos

Publicado por leonardo_josue (878 intervenciones) el 15/05/2013 17:39:53
Hola de nuevo zunea:

1
las tablas efectivamente no estan relacionadas.


Entonces tienes un problema... ¿Cómo puede la BD saber qué registro de tu tabla P1 corresponde con qué registro de tu P2?. Aunque no exista una relación "real" entre tus tablas, tú puedes crear una relación "ficticia" a fin de poder relacionar tus tablas 1 a 1... en tu ejemplo, las tablas tienen el mismo id, pero imagina que no fuera así, que los ID's no correspondieran. Si no te importa con qué registro de tu tabla P1 se une con qué registro de tu tabla P2, lo que puedes hacer es EN EL SELECT CREAR UNA NUEVA COLUMNA QUE ENUMERE LOS REGISTROS. No nos dices con que versión de SQL Server estás trabajando, pero su es 2005 o superior podrías hacer uso de la función RANK, así:

1
2
3
4
SELECT
      RANK() OVER (ORDER BY Id, Description, Cost)  as id_rank,
      Id, Description, Cost,
FROM P1


Esta consulta te crea una nueva columna enumerando del 1 al n los registros existentes, de tal manera que podrías hacer algo como esto:

1
2
3
4
5
6
7
8
9
10
11
SELECT P1.Description, P1.Cost, P2.Tax, P2.Stock, P2.Name
( SELECT
      RANK() OVER (ORDER BY Id, Description, Cost)  as id_rank,
      Id, Description, Cost,
  FROM P1) P1
INNER JOIN
( SELECT
     RANK() OVER (ORDER BY id, Tax, Stock, Name) as id_rank,
     id, Tax, Stock, Name
  FROM P2) P2
ON P1.id_rank = P2.id_rank


En estos momentos no tengo instalada ninguna versión de SQL Server, por lo que no puedo probar la solución, pero la idea sería esa.

En cuanto al ID que tienes que asignar a tu tabla P3, bueno, esa sería decisión tuya, podrías utilizar el id_rank, el de P1, o el de P2... no sé cuál sea tu lógica.

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

Crear una tabla a partir de otras dos

Publicado por Zunea (5 intervenciones) el 17/05/2013 14:56:46
Gracias a todos por la valiosa ayuda... logre solucionar el problema antes de llevar los datos a la tabla, es decir, como tenia dos archivos txt y los asentaba en tablas diferentes, estaba tratando de unir la tablas, pero no resulto, pues no tenían un campo en común. Lo que conseguí fue unir los dos archivos txt antes de llevarlos a la tabla y conseguí mi objetivo.... Este es el código que conseguí:

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
Dim strRead1 As New IO.StreamReader("D:\Tex1.txt")
        Dim strRead2 As New IO.StreamReader("D:\Text2.txt")
        Dim strbuild As New System.Text.StringBuilder
 
        While strRead2.Peek <> -1 Or strRead1.Peek <> -1
 
            If strRead1.Peek <> -1 Then
                strbuild.Append(strRead1.ReadLine.Replace(vbCrLf, ""))
            End If
 
            If strRead2.Peek <> -1 Then
                strbuild.Append(" " & strRead2.ReadLine.Replace(vbCrLf, ""))
            End If
 
            strbuild.Append(vbCrLf)
 
        End While
 
        strRead1.Close()
        strRead2.Close()
 
        Dim StrWriter As New IO.StreamWriter("D:\Text3.txt") ' Archivo con la info de Text1.txt + Text2.txt

        StrWriter.Write(strbuild.ToString)
        StrWriter.Close()


Gracias a todos de nuevo por la ayuda y el tiempo.
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
Imágen de perfil de xve

Crear una tabla a partir de otras dos

Publicado por xve (238 intervenciones) el 15/05/2013 16:37:42
Muchas gracias por tu aclaración Leonardo!!!
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

Como hago el into para crear la tercera tabla amigo?

Publicado por Luis (1 intervención) el 28/07/2013 08:51:49
Disculpa leonardo, una vez realizado mi inner para que yo tenga mi tercera tabla como inserto ? cual es el codigo de fomra correcta para insertar, por ejemplo si tengo tabla cita, tabla cliente , hago el inner, luego como hago el into para generar la tercera tabla ya creada? 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