Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Subconsulta en un insert

Estas en el tema de Subconsulta en un insert en el foro de Mysql en Foros del Web. Hola Amigos!!! necesito hacer una subconsulta dentro de un insert pero no lo puedo sacar mi consulta es esta @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver original ...
  #1 (permalink)  
Antiguo 13/04/2012, 05:58
 
Fecha de Ingreso: octubre-2010
Ubicación: Buenos Aires
Mensajes: 557
Antigüedad: 13 años, 6 meses
Puntos: 4
Subconsulta en un insert

Hola Amigos!!!
necesito hacer una subconsulta dentro de un insert
pero no lo puedo sacar
mi consulta es esta
Código MySQL:
Ver original
  1. INSERT INTO seguimientos_v  VALUES ('null','0','0','0','Rm','2','0','0','(SELECT stk FROM articulos WHERE arti_id=1)','0',now(),now())
no da ningun error esta consulta pero tampoco hace insert de esta parte

(SELECT stk FROM articulos WHERE arti_id=1)
muchas gracias por cualquier ayuda que me puedan brindar
Saludos!!!
  #2 (permalink)  
Antiguo 13/04/2012, 06:14
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Subconsulta en un insert

La sentencia que estás metiendo entre apostrofes pasa a ser simplemente un bloque de texto, y no una sentencia. MySQL no reconoce eso como una subconsulta.
Hay dos formas de resolver eso:
1) Poner directamente la consulta, ya que los apóstrofos no son necesarios si el campo devuelto es de caracteres:
Código MySQL:
Ver original
  1. INSERT INTO seguimientos_v  
  2. VALUES ('null','0','0','0','Rm','2','0','0',(SELECT stk FROM articulos WHERE arti_id=1),'0',NOW(),NOW())
Un problema potencial en este modelo de INSERT, es si al consulta devuelve más de un registro (obviamente no es el caso). En ese caso fallaría.
2) Realizar la inserción por medio de un INSERT ... SELECT..., cosa que me parece más eficiente:
Código MySQL:
Ver original
  1. INSERT INTO seguimientos_v  
  2. SELECT null, 0, 0, 0, 'Rm', 2, 0, 0, stk, 0, NOW(), NOW()
  3. FROM articulos
  4. WHERE arti_id=1

Algunos tips:
1) No pongas entre apostrofos valores numéricos a menos que le campo en la tabla no sea numérico. No sólo es innecesario, sino que obligas a MySQL a perder tiempo realizando conversiones implícitas, y además pueden esconderse errores de codificación.
2) No uses NULL entre apóstrofos. Cuando lo pones así, no representa NULL, sino la palabra "NULL", que no es lo mismo. El resultado puede no ser correcto.
3) Cuando hagas SELECTs, procura evitar usar subconsultas en el SELECT. Obligas al MySQL a ejecutar una subconsulta por cada registro devuelto en la consulta mayor. Son eficienes en el FROM o en el WHERE, pero no en el SELECT.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 13/04/2012, 06:18
 
Fecha de Ingreso: octubre-2010
Ubicación: Buenos Aires
Mensajes: 557
Antigüedad: 13 años, 6 meses
Puntos: 4
Respuesta: Subconsulta en un insert

se entendio perfectamente , ademas voy a seguir tus consejos
Saludos y muchas gracias!!!!
  #4 (permalink)  
Antiguo 13/04/2012, 07:02
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Subconsulta en un insert

__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 13/04/2012, 07:19
 
Fecha de Ingreso: octubre-2010
Ubicación: Buenos Aires
Mensajes: 557
Antigüedad: 13 años, 6 meses
Puntos: 4
Respuesta: Subconsulta en un insert

me surgio otro inconveniente con el mismo insert
Código MySQL:
Ver original
  1. INSERT INTO seguimientos_v  
  2. VALUES (null,0,0,0,'Rm',2,0,0,(SELECT stk FROM articulos WHERE arti_id=1),0,NOW(),NOW())
hasta aca todo perfecto pero en la columna siguiente de hacer el (select)en donde esta el 0 necesito hacer una operacion matematica (una resta)
entonces le puse un alias a al campo del select
Código MySQL:
Ver original
  1. INSERT INTO seguimientos_v  
  2. VALUES (null,0,0,0,'Rm',2,0,0,(SELECT (stk) AS sk FROM articulos WHERE arti_id=1),'sk' - 4,NOW(),NOW())

pero no hace la operacion en cambio en ese campo inserta el -4
como seria la forma correcta de hacerlo?
Saludos y muchas gracias!!!
  #6 (permalink)  
Antiguo 13/04/2012, 07:27
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Subconsulta en un insert

Allí ya sólo te queda una opción:
Código MySQL:
Ver original
  1. INSERT INTO seguimientos_v  
  2. SELECT NULL,0,0,0,'Rm',2,0,0,sk,(sk - 4),NOW(),NOW()
  3. FROM (SELECT (stk)  FROM articulos WHERE arti_id=1) t1.

De todos modos te recuerdo que por regla universal no se deben almacenar valores calculables. Esto significa que si ese valor que almacenas, se puede obtener luego de la misma forma en una consulta SELECT, no tiene ningún sentido guardarlo.
Además, los campos con datos calculables habitualmente requieren procesos de actualización regulares, que en el fondo n agregan eficiencia a los sistemas.

Finalmente: Poner un campo calculable te puede hacer reprobar el examen de la materia Bases de Datos en cualquier facultad...
Piénsalo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 13/04/2012, 07:35
 
Fecha de Ingreso: octubre-2010
Ubicación: Buenos Aires
Mensajes: 557
Antigüedad: 13 años, 6 meses
Puntos: 4
Respuesta: Subconsulta en un insert

Sos un capo
entonces a ver si entendi
lo puedo hacer de esta forma
Código MySQL:
Ver original
  1. INSERT INTO seguimientos_v  
  2. VALUES (NULL,0,0,0,'Rm',2,0,0,(SELECT stk FROM articulos WHERE arti_id=1),(SELECT stk FROM articulos WHERE arti_id=1) - 4,NOW(),NOW())
o la forma correcta seria asi
Código MySQL:
Ver original
  1. INSERT INTO seguimientos_v  
  2. SELECT NULL,0,0,0,'Rm',2,0,0,sk,(sk - 4),NOW(),NOW()
  3. FROM (SELECT (stk)  FROM articulos WHERE arti_id=1) t1.
Saludos y muchas gracias!!!
  #8 (permalink)  
Antiguo 13/04/2012, 07:39
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Subconsulta en un insert

Como te dije: Sólo una opción.
Código MySQL:
Ver original
  1. INSERT INTO seguimientos_v  
  2. SELECT NULL,0,0,0,'Rm',2,0,0,sk,(sk - 4),NOW(),NOW()
  3. FROM (SELECT (stk)  FROM articulos WHERE arti_id=1) t1.
La primera que pones no va a funcionar por problemas con el alias.

Ten muy en cuenta lo que te digo de los campos calculables.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 13/04/2012, 07:41
 
Fecha de Ingreso: octubre-2010
Ubicación: Buenos Aires
Mensajes: 557
Antigüedad: 13 años, 6 meses
Puntos: 4
Respuesta: Subconsulta en un insert

listo ya entendi todo !!!
Saludos y gracias por ayudar a este novato
Chau chau

Etiquetas: insert, select, subconsulta
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:36.