SQL - INSERT!

 
Vista:

INSERT!

Publicado por RAJIR (1 intervención) el 07/01/2005 22:21:23
hola tengo 3 sentencias:
1 sentencia: select * from tabla1 where datos1=\'45\'
2 sentecia:select * from tabla 2 where datos2 = \'52\'
3 sentecia:select * from tabla 3 where datos3 = \'11\'
respuesta:
sentencia 1 = 88
sentencia 2 = 44
sentecia 3 = 22
quiero ingresar los dos resultados en una misma tabla, es decir
debe ingresarse asi en la tabla:

campo1 I campo 2 I campo 3 I
------------I--------------I-------------I
88 I 44 I 22 I

cuando coloco la sentencia asi:
insert tabla4 (campo1)select * from tabla1 where datos1=\'45\'
insert tabla4 (campo2)sentecia:select * from tabla 2 where datos2 = \'52\'
insert tabla4 (campo3)sentecia:select * from tabla 3 where datos3 = \'11\'
me da asi:
campo1 I campo 2 I campo 3 I
------------I--------------I-------------I
88 I NULL I NULL I
NULL I 44 I NULL I PORQUE QUE HAGO???
NULL I NULL I 22 I
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

RE:INSERT!

Publicado por rajir (1 intervención) el 07/01/2005 22:51:13
no en sql!!!
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

RE:INSERT!

Publicado por Liliana (426 intervenciones) el 10/01/2005 11:32:48
Hola,
Cada instrucción INSERT, agregará a tu tabla tantas líneas como resultados arroje, por eso tus tres INSERT en la tabla4 agrega tres líneas.
Para solucionar este problema, la consulta correcta sería por ejemplo:

INSERT tabla4
SELECT campo1 = (SELECT COUNT(*) FROM tabla1 WHERE datos1=\'45\' ),
campo2 = (SELECT COUNT(*) FROM tabla2 WHERE datos2=\'52\' ),
campo3 = (SELECT COUNT(*) FROM tabla3 WHERE datos3=\'11\' )

Si las tablas involucradas son grandes y no tienen índice sobre los datos evaluados, el tiempo de respuesta puede ser mortal ya que recorrerá las tres tablas completas contando la información.
Te sugeriría que indexaras esos datos o consideraras otra opción.
Saludos, Liliana.
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

RE:INSERT!

Publicado por david (19 intervenciones) el 10/01/2005 14:22:49
asi pero agrega los campos:
INSERT tabla4 (campo1,campo2,campo3)
SELECT campo1 = (SELECT COUNT(*) FROM tabla1 WHERE datos1=\'45\' ),
campo2 = (SELECT COUNT(*) FROM tabla2 WHERE datos2=\'52\' ),
campo3 = (SELECT COUNT(*) FROM tabla3 WHERE datos3=\'11\' )
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

RE:INSERT!

Publicado por Liliana (426 intervenciones) el 10/01/2005 14:53:38
Hola David,
Buena observación la tuya.
Como podrás ver en los libros en pantalla, hay más de una forma de escribir un INSERT, y dará el mismo resultado.
La ventaja de tu sintaxis sobre la mía, es que si se cambia la estructura de la tabla4, no tendrás problemas, y yo sí, aunque las dos sean válidas.
Gracias por el comentario.
Liliana.
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