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

Duplicar registros

Estas en el tema de Duplicar registros en el foro de Bases de Datos General en Foros del Web. Necesito duplicar un registro casi íntegramente. La idea es copiar todos los datos de un registro excepto el id (primary key). Uso MySQL. Si pudiera ...
  #1 (permalink)  
Antiguo 06/08/2002, 05:07
Avatar de Cain  
Fecha de Ingreso: enero-2002
Ubicación: Catalunya
Mensajes: 6.459
Antigüedad: 22 años, 3 meses
Puntos: 17
Duplicar registros

Necesito duplicar un registro casi íntegramente. La idea es copiar todos los datos de un registro excepto el id (primary key).
Uso MySQL.
Si pudiera ser una sola instrucción SQL mejor.

He provado cosas como INSERT INTO table VALUES (SELECT * FROM table WHERE id=2) pero dan errores :P

Joe Tawers,
<a href="http://www.ilimit.com/towers">http://www.ilimit.com/towers</a>
  #2 (permalink)  
Antiguo 06/08/2002, 08:34
 
Fecha de Ingreso: julio-2002
Mensajes: 219
Antigüedad: 21 años, 9 meses
Puntos: 0
Re: Duplicar registros

Hola.

Trata con esto:

INSERT INTO table SELECT * FROM otraTable WHERE id = 2

Si lo que quieres es que te copie sólo algunos campos, prueba esto otro:

INSERT INTO table SELECT campo1, campo2, campoN FROM otraTable WHERE id = 2


Suerte y me avisas.
  #3 (permalink)  
Antiguo 06/08/2002, 08:46
Avatar de Cain  
Fecha de Ingreso: enero-2002
Ubicación: Catalunya
Mensajes: 6.459
Antigüedad: 22 años, 3 meses
Puntos: 17
Re: Duplicar registros

Perfecto, ¿pero no se puede hacer un INSERT table SELECT FROM table indicando siempre la misma tabla?

Joe Tawers,
<a href="http://www.ilimit.com/towers">http://www.ilimit.com/towers</a>
  #4 (permalink)  
Antiguo 07/08/2002, 16:46
 
Fecha de Ingreso: julio-2002
Mensajes: 219
Antigüedad: 21 años, 9 meses
Puntos: 0
Re: Duplicar registros

Si se puede.
  #5 (permalink)  
Antiguo 08/08/2002, 02:59
Avatar de Cain  
Fecha de Ingreso: enero-2002
Ubicación: Catalunya
Mensajes: 6.459
Antigüedad: 22 años, 3 meses
Puntos: 17
Re: Duplicar registros

Pues en la documentación pone que no, y a mi no me funciona.

Joe Tawers,
<a href="http://www.ilimit.com/towers">http://www.ilimit.com/towers</a>
  #6 (permalink)  
Antiguo 08/08/2002, 03:05
Avatar de Mickel  
Fecha de Ingreso: mayo-2002
Ubicación: Lima, Peru
Mensajes: 4.619
Antigüedad: 21 años, 11 meses
Puntos: 7
Re: Duplicar registros

La sintaxis es
Insert into`(tabla) (campos)
Select (campos)
from (tabla)
(condicion where)
  #7 (permalink)  
Antiguo 08/08/2002, 03:20
Avatar de Cain  
Fecha de Ingreso: enero-2002
Ubicación: Catalunya
Mensajes: 6.459
Antigüedad: 22 años, 3 meses
Puntos: 17
Re: Duplicar registros

Ya, pero si indico la misma tabla en INSERT y en SELECT, me dice que hay un error de SQL.

Joe Tawers,
<a href="http://www.ilimit.com/towers">http://www.ilimit.com/towers</a>
  #8 (permalink)  
Antiguo 08/08/2002, 05:35
 
Fecha de Ingreso: enero-2002
Ubicación: Zaragoza
Mensajes: 144
Antigüedad: 22 años, 3 meses
Puntos: 0
Re: Duplicar registros

Yo soluciono el problema creando una vista(que realmente es una copia integra de la tabla). Así aunque realmente es la misma tabla para el analizador de SQL son dos tablas distintas
  #9 (permalink)  
Antiguo 08/08/2002, 06:09
Avatar de Cain  
Fecha de Ingreso: enero-2002
Ubicación: Catalunya
Mensajes: 6.459
Antigüedad: 22 años, 3 meses
Puntos: 17
Re: Duplicar registros

y ¿eso como lo haces?

Joe Tawers,
<a href="http://www.ilimit.com/towers">http://www.ilimit.com/towers</a>
  #10 (permalink)  
Antiguo 08/08/2002, 21:47
Avatar de Mickel  
Fecha de Ingreso: mayo-2002
Ubicación: Lima, Peru
Mensajes: 4.619
Antigüedad: 21 años, 11 meses
Puntos: 7
Re: Duplicar registros

eso lo harias
Insert into (tabla) (campos)
Select (campos)
from (vista)
(condicion where)

donde (vista)
es simplemente un alias para un select * from (tabla)
  #11 (permalink)  
Antiguo 09/08/2002, 02:26
Avatar de Cain  
Fecha de Ingreso: enero-2002
Ubicación: Catalunya
Mensajes: 6.459
Antigüedad: 22 años, 3 meses
Puntos: 17
Re: Duplicar registros

Buena idea!!
Lo probaré, gracias :)

Joe Tawers,
<a href="http://www.ilimit.com/towers">http://www.ilimit.com/towers</a>
  #12 (permalink)  
Antiguo 09/08/2002, 05:53
 
Fecha de Ingreso: agosto-2002
Mensajes: 7
Antigüedad: 21 años, 8 meses
Puntos: 0
Re: Duplicar registros

No se si ya te ha funcionado algo, pero yo probaria lo siguiente:

a la tabla le pones un alias como cuando necesitas cruzar dos veces la misma tabla.

select campo1 a, campo2 b
from tabla a, tabla b
where a.campo=b.campo

donde las tablas a y b son la misma pero las trata de forma distinta por estar con un alias.

Ya dirá s lo que sea
;)

  #13 (permalink)  
Antiguo 09/08/2002, 12:40
Avatar de Linterns
Colaborador
 
Fecha de Ingreso: diciembre-2001
Mensajes: 2.799
Antigüedad: 22 años, 4 meses
Puntos: 11
Re: Duplicar registros

Pues no se sise puede en MySql pero si estan insertando un registros de una tabla dentro de la misma tabla les dara el error de Primary Key.


Lo que yo hago es lo siguiente:
insert into table1 (campo1, campo2, campo3)
select ('newvalor', campo2, campo3);

en donde campo1 corresponde a mi llave primaria (es por ello que agrego un nuevo valor).



------------------------
Move Up or Move Out !!!
------------------------
  #14 (permalink)  
Antiguo 28/10/2004, 17:17
 
Fecha de Ingreso: mayo-2003
Ubicación: Monte VI D.E.O.
Mensajes: 78
Antigüedad: 20 años, 10 meses
Puntos: 0
Sonrisa Solucioné el mismo problema en Oracle

Mi problema era bastante similar:
Tenia una tabla con muchos registros que necesitaba duplicar cambiando solo algunos en algunas partes nada mas
La solucion en mi caso fue la siguiente (para quien le interese):

INSERT INTO [MiTabla]
[Campo1],
[Campo2],
[Campo3],
[Campo4],
[Campo5],
[Campo6],
[Campo7],
[Campo8],
[CampoN],
FROM [MismaTabla]
WHERE [Condicion]

El ejemplo gráfico es asi:
Necesitaba agregar los campos donde el campo TABLA_ID que tenia valor 401 fuera 421, el resto seguia igual (no es actualizar, sino insertar, tener, ademas de los campos 401 los campos iguales pero 421):

INSERT INTO VEN_TABLAS_REGISTROS
SELECT
TABREG_ID,
TABREG_CORRELATIVO_MODIF,
SEX_ID,
421, <--- Reemplazo el nombre del campo por el valor a modificar
NEG_ID,
TIPPREM_ID,
ESTV_ESTADO_VIG
FROM VEN_TABLAS_REGISTROS
WHERE TABLA_ID = 401 <--- Duplico campos iguales a éste

Listo, este tema es del 2002, pero espero que le sirva de ayuda a alguien ya que tantas veces me han ayudado a mi
__________________
:adios: Henry Rodriguez :adios:
El todo es mucho mas que la suma de las partes<-- No se quien lo dijo pero suena interesante :)

Última edición por jjmagro; 28/10/2004 a las 17:18 Razón: Mejorar la estetica
  #15 (permalink)  
Antiguo 07/11/2004, 04:54
Avatar de Cain  
Fecha de Ingreso: enero-2002
Ubicación: Catalunya
Mensajes: 6.459
Antigüedad: 22 años, 3 meses
Puntos: 17
Muchas gracias a todos, al final lo que hice fue crear una tabla clónica para pasar de la tabla 1 a la clónica y de la clónica a la 1 de nuevo. Un poco cutre, pero funcionó
__________________
M a l d i t o F r i k i
  #16 (permalink)  
Antiguo 03/12/2010, 06:25
Avatar de arielcasanova  
Fecha de Ingreso: octubre-2004
Ubicación: Bahía Blanca - Argentina
Mensajes: 332
Antigüedad: 19 años, 6 meses
Puntos: 1
Respuesta: Duplicar registros

Venga, encontré esta función:

function DuplicateMySQLRecord ($table, $id_field, $id) {
// load the original record into an array
$result = mysql_query("SELECT * FROM {$table} WHERE {$id_field}={$id}");
$original_record = mysql_fetch_assoc($result);

// insert the new record and get the new auto_increment id
mysql_query("INSERT INTO {$table} (`{$id_field}`) VALUES (NULL)");
$newid = mysql_insert_id();

// generate the query to update the new record with the previous values
$query = "UPDATE {$table} SET ";
foreach ($original_record as $key => $value) {
if ($key != $id_field) {
$query .= '`'.$key.'` = "'.str_replace('"','\"',$value).'", ';
}
}
$query = substr($query,0,strlen($query)-2); # lop off the extra trailing comma
$query .= " WHERE {$id_field}={$newid}";
mysql_query($query);

// return the new id
return $newid;
}
__________________
Ariel Casanova
diseño y desarrollo web estratégico
www.emporia.com.ar
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

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 05:22.