elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Security Series.XSS. [Cross Site Scripting]


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  Bases de Datos (Moderador: Carloswaldo)
| | | |-+  insert y subconsultas en mysql
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: insert y subconsultas en mysql  (Leído 11,039 veces)
doreymis

Desconectado Desconectado

Mensajes: 7



Ver Perfil
insert y subconsultas en mysql
« en: 8 Junio 2010, 15:21 pm »

hola a todos...

queria saber si existe una manera de insertar un mismo valor a todos los registros de una tabla usando una sub consulta. en mi ejemplo, insertar una misma fecha y hora de entrada para todos los empleados de la tabla empleado.

esta es la estructura de mis 2 tablas

tabla empleado:
ci
1
2
3
nombre
pedro
x
y
apellido
perez
x
y

tabla asistencia:
fechacihoraEhoraS

esta es la sentencia que estoy usando (la que mejor se me ocurrio jeje)
Código:
insert into asistencia values ("2010-06-07",(select empleado.ci from empleado),"08:00:00",horaS)

el error que me da es que la sub consulta me devuelve mas de un valor. me gustaria que pudieran indicarme como hacerlo correctamente.



En línea

...:::little lulu:::...
novalida

Desconectado Desconectado

Mensajes: 160


Ver Perfil
Re: insert y subconsultas en mysql
« Respuesta #1 en: 8 Junio 2010, 16:00 pm »

Hola,
podrías explicar un poco mejor eso de

insertar un mismo valor a todos los registros de una tabla

¿Lo que quieres es "insertar" todos los empleados de la tabla EMPLEADO en la tabla ASISTENCIA? Si es esto lo que quieres hacer:

  • 1º Crea un procedimiento en el que extraigas el contenido de la subconsulta de la tabla EMPLEADO a un cursor.
  • 2º  Recorre dicho cursor en un bucle en el cual se lleve a cabo la operación de inserción en la tabla ASISTENCIA.
Espero que te haya sido de utilidad. En cualquier caso aquí estaré por si se te puede echar una mano :)

Un saludo.


En línea

ssccaann43 ©


Desconectado Desconectado

Mensajes: 792


¬¬


Ver Perfil
Re: insert y subconsultas en mysql
« Respuesta #2 en: 8 Junio 2010, 17:22 pm »

Código
  1.  
  2. INSERT INTO asistencia(ci,fecha,horaE,horaS) (SELECT empleado.ci,[2010-06-07] AS Fecha,[08:00:00] AS horaE,[12:00:00] AS HoraS FROM empleado)
  3.  
  4.  

Saludos  ;D
En línea

- Miguel Núñez
Todos tenemos derechos a ser estupidos, pero algunos abusan de ese privilegio...
"I like ^TiFa^"
doreymis

Desconectado Desconectado

Mensajes: 7



Ver Perfil
Re: insert y subconsultas en mysql
« Respuesta #3 en: 8 Junio 2010, 20:45 pm »

lo que sucede es que perdi todos los registros de asistencia de esa fecha.. y lo que quiero es asignarle una hora de entrada y salida a todos los empleados (para que no me quede ese dia en blanco), xq son muchos registros de empleado y es tedioso hacer el insert por cada ci.

estoy revisando el manual de mysql para seber algo del procedure xq no he trabajado con eso antes y bueno tengo algunos errores de syntax... si tienes un ejemplito por ahi de como trabajarlo te lo agradeceria.... ;D
En línea

...:::little lulu:::...
^Tifa^


Desconectado Desconectado

Mensajes: 2.804


Ver Perfil
Re: insert y subconsultas en mysql
« Respuesta #4 en: 8 Junio 2010, 21:26 pm »

A lo mejor esto te puede ayudar.

Tengo 2 tablas (como ejemplo):

Código
  1. mysql> DESCRIBE example;
  2. +--------+----------+------+-----+---------+-------+
  3. | FIELD  | TYPE     | NULL | KEY | DEFAULT | Extra |
  4. +--------+----------+------+-----+---------+-------+
  5. | nombre | CHAR(20) | YES  |     | NULL    |       |
  6. | fecha  | DATE     | YES  |     | NULL    |       |
  7. +--------+----------+------+-----+---------+-------+
  8. 2 ROWS IN SET (0.00 sec)
  9.  
  10. mysql> DESCRIBE ejemplo;
  11. +--------+----------+------+-----+---------+-------+
  12. | FIELD  | TYPE     | NULL | KEY | DEFAULT | Extra |
  13. +--------+----------+------+-----+---------+-------+
  14. | nombre | CHAR(20) | YES  |     | NULL    |       |
  15. | fecha  | DATE     | YES  |     | NULL    |       |
  16. +--------+----------+------+-----+---------+-------+
  17. 2 ROWS IN SET (0.02 sec)
  18.  

Una tiene registros, la otra esta vacia:

Código
  1.  
  2. mysql> SELECT * FROM ejemplo;
  3. +--------+------------+
  4. | nombre | fecha      |
  5. +--------+------------+
  6. | coco   | 0000-00-00 |
  7. | Maria  | 2010-11-23 |
  8. | Juan   | 2005-05-23 |
  9. | Carlos | 2004-05-25 |
  10. | Ana    | 2010-11-23 |
  11. +--------+------------+
  12. 5 ROWS IN SET (0.00 sec)
  13.  
  14. mysql> SELECT * FROM example;
  15. Empty SET (0.00 sec)
  16.  
  17.  

Asi que, como quiero obtener todos los 'nombres' de la tabla ejemplo he introducirlos en la tabla example
no puedo hacer lo que sugeriste al inicio de este post, porque:

1 - Una consulta INSERT unica en la linea de comando, solo sirve para insertar 1 sola fila dentro de una tabla
No es un bucle, no es un loop, es una sola fila dentro de la tabla.

2 - Al utilizar un subquery como hiciste, dentro del unico INSERT en linea de comando, caemos en el mismo problema
dicho subquery te retorna mas de 1 registro (SELECT * FROM... retorna varios registros no uno solo) sin embargo
tu consulta INSERT solo inserta 1 fila de una sola vez.

ENtonces que haces, si tu tienes que captar varios registros y ingresarlo en una tabla pero con una simple consulta
SQL INSERT en linea de comandos no puedes? pues te ayudas en este caso de un procedimiento almacenado, como bien dijiste
dicho procedimiento tiene que tener CURSORES y un bucle repetitivo que vaya captando indice por indice cada registro
y lo vaya insertando en la tabla deseada... entonces, (no soy buena con el limitante PL/SQL de MySQL) pero aqui vamos,
esto te puede servir de ejemplo:

Código
  1.  
  2. mysql> delimiter /
  3.  
  4. mysql> CREATE PROCEDURE proceso()
  5. BEGIN
  6. DECLARE hecho INT DEFAULT 0;
  7. DECLARE a CHAR(20);
  8. DECLARE cursor1 cursor FOR SELECT nombre FROM primaria.ejemplo;
  9. DECLARE continue handler FOR sqlstate '02000' SET hecho = 1;
  10. OPEN cursor1;
  11. repeat
  12. fetch cursor1 INTO a;
  13. IF NOT hecho THEN
  14. INSERT INTO example VALUES(a, '2010-11-23');
  15. END IF;
  16. until hecho END repeat;
  17. close cursor1;
  18. END;
  19. /
  20.  
  21. mysql> delimiter ;
  22.  
  23.  

Hecho el procedimiento anterior.. lo llamas:

Código
  1.  
  2. mysql> CALL proceso();
  3. Query OK, 1 ROW affected (0.01 sec)
  4.  
  5. mysql> SELECT * FROM example;
  6. +--------+------------+
  7. | nombre | fecha      |
  8. +--------+------------+
  9. | coco   | 2010-11-23 |
  10. | Maria  | 2010-11-23 |
  11. | Juan   | 2010-11-23 |
  12. | Carlos | 2010-11-23 |
  13. | Ana    | 2010-11-23 |
  14. +--------+------------+
  15. 5 ROWS IN SET (0.00 sec)
  16.  
  17.  

Salu2.

En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Insert Retrazado en MySQL « 1 2 »
Bases de Datos
Skeletron 11 9,689 Último mensaje 18 Enero 2011, 19:30 pm
por Skeletron
Problema con INSERT MySQL y VB.net (2003 y 2010)
.NET (C#, VB.NET, ASP)
Dreamcacher 4 4,340 Último mensaje 28 Enero 2012, 03:33 am
por Graphixx
Problema con subconsultas en mysql [solucionado]
Bases de Datos
bewa 3 6,404 Último mensaje 1 Abril 2012, 01:52 am
por bewa
simple duda Consulta mysqlworkbench Insert into con 2 subconsultas
Bases de Datos
Anonymous250 1 2,530 Último mensaje 13 Junio 2012, 23:41 pm
por Shell Root
clausula OUTPUT en sentencias INSERT de mySQL
Bases de Datos
peib0l 9 6,563 Último mensaje 2 Octubre 2014, 01:00 am
por peib0l
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines