Comunidad de diseño web y desarrollo en internet online

Problemas con el INSERT...SELECT de multiples condiciones

Citar            
MensajeEscrito el 21 Nov 2007 04:01 pm
Hola a todos le escribo porque tengo un serio problema para realizar el llenado de una tabla que debe ser un resumen de otra. Mi problema es que tengo una sintaxis que funciona perfecto para SQL Server pero no en MySQL aunque no me de error sino que solo me inserta valores NULL.

el codigo es el siguiente:

INSERT into tabla(ID, cant_adultos, cant_niños)
SELECT
ID = (SELECT ID FROM tabla2),
cant_adultos = (SELECT count(*) FROM tabla2 where edad > '12'),
cant_niños = (SELECT count(*) FROM tabla2 where edad <= '12');

esta logica funciona perfectamente en SQL y en MySQL no me da error pero me llena la tabla de NULL.

Espero me puedan ayudar por favor... estoy desesperada y ya tengo muchas semanas probando de mil maneras.

Por mala

8 de clabLevel



Genero:Femenino  

firefox
Citar            
MensajeEscrito el 21 Nov 2007 04:06 pm
Utiliza store procedures.

Te recomiendo que uses Navicat(es un cliente MySQL) para los store procedures.

saludos

Por Dano

BOFH

4273 de clabLevel

14 tutoriales
4 articulos
10 ejemplos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Lugar estratégico para vigilarte

firefox
Citar            
MensajeEscrito el 21 Nov 2007 04:12 pm
Ese es precisamente mi problema. Tal vez debi aclarar que esto esta dentro de un store Procedure que llena varias tablas con la misma metodologia.

Ya he probado de todo y no entiendo porque me inserta valores Null

Por mala

8 de clabLevel



Genero:Femenino  

firefox
Citar            
MensajeEscrito el 21 Nov 2007 04:20 pm
mala, utiliza mejor variables y listo, no tienes por que tener problemas:


Código :

SET @id = SELECT ID FROM tabla WHERE algo LIMIT 0,1;
INSERT into tabla(ID)
VALUES
(@id);



saludos

Por Dano

BOFH

4273 de clabLevel

14 tutoriales
4 articulos
10 ejemplos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Lugar estratégico para vigilarte

firefox
Citar            
MensajeEscrito el 21 Nov 2007 07:02 pm
Gracias por tu ayuda Dano pero la verdad ya no se que hacer.
Esa idea es muy buena y creo que funcionaria solo que no me acepta la sentencia del "SET"

SET @ID = (SELECT IDnum FROM tabla WHERE ID = 123);

Al colocarla como esto con los parentesis simplemente no me asigna valores a la variable.
Sin los parentesis me aparece un error de sintaxis.

Quisiera entonces que ayudaran a saber cual es el error ya que en todos los tutoriales aparece de esta manera.

Auxilio!!!!

Por mala

8 de clabLevel



Genero:Femenino  

firefox
Citar            
MensajeEscrito el 21 Nov 2007 07:07 pm
Publica tu Store procedure completo aqui. Recuerda usar las etiquetas code.

Por Dano

BOFH

4273 de clabLevel

14 tutoriales
4 articulos
10 ejemplos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Lugar estratégico para vigilarte

firefox
Citar            
MensajeEscrito el 21 Nov 2007 07:46 pm
CREATE DEFINER=`user`@`%` PROCEDURE `prueba`()
BEGIN

SET @total = (SELECT sum(CDRID) FROM CDRS WHERE ID = 123);
SET @DURATION = (SELECT sum(DURATION) FROM CDRS WHERE DURATION != 0);
INSERT INTO prueba(@total,@DURATION) values (@total,@DURATION);

END $$

Este es el store P de prueba con el que estoy comenzando. La idea es llenar una tabla con el resumen estadistico de otra llamada CDR que contiene mas de un millon de registros. Estos deben ser prosesados para obtener solo los datos relevantes como: numero de registros, total de minutos usados, cantidad de llamadas, etc.

por esta rzon es vital la informacion.

Por mala

8 de clabLevel



Genero:Femenino  

firefox
Citar            
MensajeEscrito el 21 Nov 2007 08:00 pm
Prueba a utilizar SELECT...INTO en lugar de SET.

Código :

CREATE PROCEDURE `prueba`()
BEGIN

SELECT sum(CDRID) FROM CDRS WHERE ID = 123 INTO @total;
SELECT sum(DURATION) FROM CDRS WHERE DURATION != 0 INTO @DURATION;
INSERT INTO prueba(total,DURATION) values (@total,@DURATION);

END


Ese no me marca ningún error en MySQL, adáptalo, pruébalo y me cuentas, porque la verdad no se sí en realidad hace lo que pides.

Saludos.

Por Darel

725 de clabLevel

5 tutoriales

 

I'm a human

firefox
Citar            
MensajeEscrito el 21 Nov 2007 10:21 pm
Te da errores, por que la sintaxis esta mal. En MySQL el diferente es <> y no !=. Y los campos de la tabla no van con variable(me refiero a lo que tienes antes de value.

Código :

CREATE PROCEDURE `prueba`()
BEGIN

SET @total = (SELECT sum(CDRID) AS Total FROM CDRS WHERE ID = 123);
SET @DURATION = (SELECT sum(DURATION) FROM CDRS WHERE DURATION <> 0);

INSERT INTO prueba (total,DURATION) values (@total,@DURATION);

END


saludos

Por Dano

BOFH

4273 de clabLevel

14 tutoriales
4 articulos
10 ejemplos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Lugar estratégico para vigilarte

firefox
Citar            
MensajeEscrito el 22 Nov 2007 12:04 am

Dano escribió:

Te da errores, por que la sintaxis esta mal. En MySQL el diferente es <> y no !=. Y los campos de la tabla no van con variable(me refiero a lo que tienes antes de value.


Ya, se me pasó lo de "diferente de", pero no sé porqué razón se ejecutó y en efecto, me insertaba los registros, por que he dicho que NO me marcó error, y no sé porque a tí si.
Dano, debiste haber preguntado al menos que versión utilizo, o cualquier cosa, antes de haberme hecho quedar como mentiroso.

Saludos.

Por Darel

725 de clabLevel

5 tutoriales

 

I'm a human

firefox
Citar            
MensajeEscrito el 22 Nov 2007 01:27 am
Darel perdón por hacerte quedar como mentiroso. Pero no fue mi intención. Creeme que a veces respondo y no leo todo, malditas prisas.

saludos, un abrazo :wink:

Por Dano

BOFH

4273 de clabLevel

14 tutoriales
4 articulos
10 ejemplos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Lugar estratégico para vigilarte

firefox
Citar            
MensajeEscrito el 23 Nov 2007 03:28 pm
Mil y un gracias muchachos!!!

Pero despues de tanto probar me funciono con "insert into" lo que sucede es que descubri tambien que MySQL no permite trabajar con las claves primarias dentro de los stores procedure, al menos eso era la razon de mi "NULL". Una vez que probe con otro campo diferente a la clave me inserto los registros sin problemas.

No se si esto en un error... pueden corregirme y decirme el por que no puedo emplear las primary key en SP.

GRACIAS!!! javascript:emoticon(':wink:')
Guiño

Por mala

8 de clabLevel



Genero:Femenino  

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.