INSERT TO con varios SELECT

  • Autor Autor cooply
  • Fecha de inicio Fecha de inicio
C

cooply

Beta
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Buenas a todos,

Quiero insertar en una tabla varios registros de varias tablas.

Necesito ingresar los datos de T1 y T2 en T3

T1

-id
-nombre

T2

-url
-tipo

T3

-id --- T1.id_usuario
-nick --- T1.nombre
-link --- T2.url
-modo --- T2.tipo


Lo he intentado con esto pero no lo consigo...

PHP:
INSERT INTO `T3` (`id` ,`nick`,`link`,`modo`)

SELECT
 a1.id , a1.nombre, a2.url, a2.tipo
FROM

  (SELECT `id`,`nombre` FROM `T1`)   AS a1
CROSS JOIN
  (SELECT `url`,`tipo` FROM `T2`)   AS a2


Espero que alguine pueda ayudarme, saludos y gracias.
 
Última edición:
Una duda, tu campo ID en la tabla T3 no está declarado como llave primaria? De ser así, el error que te podría arrojar es que estás tratando de meter el mismo ID más de una vez. Si tienes el error de MySQL sería bueno que lo pegaras para revisarlo.

PD: yo suelo agrupar el select entre (), desconozco si así correrá (me acostumbré a usar paréntesis y ya nunca lo pobré sin ellos jeje).
 
Buenas [MENTION=10463]Tony[/MENTION], muchas gracias por contestar,

La cosulta la hace correctamente, pero coge datos de las dos tablas y me crea 60.000 registros cuando deberia de crearme 2.000 mas o menos

Creo que multiplica los 2 SELECT y por eso devuelve tantos registros.

Mi pregunta es si hay otra forma de hacerlo o si tengo algun error en ese codigo.
Un saludo y gracias.
 
Ah eso!

Si, es normal que salgan tantos registros porque lo que hace cross join es multiplicar cada elemento de Tabla1 por cada elemento de Tabla2.

Intenta con INNER JOIN (solo insertará registros que coincidan en ambas tablas):

PHP:
INSERT INTO `T3` (`id` ,`nick`,`link`,`modo`)

SELECT a1.id , a1.nombre, a2.url, a2.tipo
FROM (SELECT `id`,`nombre` FROM `T1`)   AS a1
INNER JOIN (SELECT `id_referencia_tabla_1`, `url`,`tipo` FROM `T2`)   AS a2  ON a1.id = a2.id_referencia_tabla_1

Intenta y dime como te va.
 
Geniaaaaal!!! ha funcionado, llevo muchisimo rato intentado buscarle una solución y lo has arreglado en 2 lineas jejeje

Muchisimas gracias, me has alegrado el dia [MENTION=10463]Tony[/MENTION] 😀 😀 😀 !!!

Un gran saludo y de nuevo mil gracias 🙂
 
Geniaaaaal!!! ha funcionado, llevo muchisimo rato intentado buscarle una solución y lo has arreglado en 2 lineas jejeje

Muchisimas gracias, me has alegrado el dia [MENTION=10463]Tony[/MENTION] 😀 😀 😀 !!!

Un gran saludo y de nuevo mil gracias 🙂
No hay de que, saludos! :encouragement:
 

Temas similares

Atrás
Arriba