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

Insertar en una tabla el resultado de una consulta

Estas en el tema de Insertar en una tabla el resultado de una consulta en el foro de Mysql en Foros del Web. Bueno lo que busco hacer es realizar un insert a una tabla y que en el mismo insert tenga una subconsulta la cual obtendría los ...
  #1 (permalink)  
Antiguo 14/01/2010, 01:01
 
Fecha de Ingreso: abril-2009
Mensajes: 13
Antigüedad: 15 años
Puntos: 0
Pregunta Insertar en una tabla el resultado de una consulta

Bueno lo que busco hacer es realizar un insert a una tabla y que en el mismo insert tenga una subconsulta la cual obtendría los valores que quiero insertart.

Yo tengo las tablas
cuentas:
usuario, password, ultimo_acceso.

cuentas_data:
usuario, tipo_de_cuenta, fecha_entrega_de_tipo, duración.


y este seria el insert:

INSERT INTO cuentas_data(usuario, tipo_de_cuenta, fecha_entrega_de_tipo, duración)
VALUES
(SELECT usuario, 2 as tipo_de_cuenta, UNIX_TIMESTAMP( ) as fecha_entrega_de_tipo, 120 as duración FROM cuentas WHERE ((DATEDIFF( CURRENT_DATE( ) , FROM_UNIXTIME( `ultimo_acceso` /1000 )) ) < 30))

El SELECT que esta dentro del INSERT por separado me corre bien, pero al momento de usarlo con el INSERT me sale un error(1064 para ser mas exacto) diciendo me que hay un error de sintaxis cerca de SELECT usuario, ....

Primero que nada me gustaría ya poder estar seguro de que esto se puede hacer, porque es la primera vez que lo hago y desconosco si se puede.

Saludos.
  #2 (permalink)  
Antiguo 14/01/2010, 03:02
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Insertar en una tabla el resultado de una consulta

Sí, se puede hacer, (12.2.5. INSERT Syntax) tercer ejemplo.

Código MySQL:
Ver original
  1. INSERT INTO cuentas_data
  2.            (usuario, tipo_de_cuenta, fecha_entrega_de_tipo, duracion)
  3.             (SELECT c.usuario,
  4.                           2 as tipo_de_cuenta,
  5.                           UNIX_TIMESTAMP( ) as fecha_entrega_de_tipo,
  6.                           120 as duracion
  7.                  FROM cuentas as ´c´
  8.                  WHERE ((DATEDIFF( CURRENT_DATE( ) ,
  9.                                  FROM_UNIXTIME( c.ultimo_acceso /1000 )) ) < 30))

El alias c igual ayuda.

Googelando

Cita:
Why do i get a query syntax error 1064 from MySQL when
the syntax seems correct?
You will get a MySQL query syntax error number 1064 when you incorrectly use a reserved word in your query such as "when" or "order".

MySQL 4 has additional reserved words that you cannot use and the full list of them is at http://www.mysql.com/doc/en/Reserved_words.html.
Pero no parece el caso....

Quita el acento a duración (no uses nunca caracteres raros en el nombre de los campos)

Suerte


Quim
  #3 (permalink)  
Antiguo 14/01/2010, 04:06
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Insertar en una tabla el resultado de una consulta

Además de lo que te dice Quim, esto me resulta sospechoso
cuentas as ´c´
yo lo escribiría así
cuentas c
  #4 (permalink)  
Antiguo 14/01/2010, 05:18
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: Insertar en una tabla el resultado de una consulta

Código MySQL:
Ver original
  1. INSERT INTO cuentas_data(usuario, tipo_de_cuenta, fecha_entrega_de_tipo, duraci&#243;n)
  2. SELECT usuario, 2, UNIX_TIMESTAMP( ), 120
  3. FROM cuentas
  4. WHERE DATEDIFF( CURRENT_DATE( ) , FROM_UNIXTIME( `ultimo_acceso` /1000 ))) < 30;
Si usas un SELECT para cargar una tabla, el VALUES es innecesario, como también son innecesarios los alias.
Como dice jurena, la cláusula AS ya no es obligatoria (es opcional desde hace años).
__________________
¿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 14/01/2010, 09:35
 
Fecha de Ingreso: abril-2009
Mensajes: 13
Antigüedad: 15 años
Puntos: 0
De acuerdo Respuesta: Insertar en una tabla el resultado de una consulta

Es tal como dijo gnzsoloyo, le saque el VALUES y los alias dejando solamente el SELECT a continuación y me anduvo perfecto.

Gracias a todos por sus respuestas.

PD: No sabia eso del "AS", gracias por el dato.
  #6 (permalink)  
Antiguo 14/01/2010, 09:42
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Insertar en una tabla el resultado de una consulta

Pero el problema no era, creo, el uso de AS (uso que ya no es obligatorio, pero no supone tampoco problema), sino el empleo que hacías de los acentos para el nombre de tabla.

Etiquetas: tablas, resultados
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 22:31.