Ver Mensaje Individual
  #2 (permalink)  
Antiguo 13/04/2012, 06:14
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años, 1 mes
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)