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

error Duplicate Column name

Estas en el tema de error Duplicate Column name en el foro de Mysql en Foros del Web. Hola amigos estoy intentando hacer una validacion y un insert en una misma sentencia: verificando que ese i.IdContacto = '1' and i.IdEvento='2' de la tabla ...
  #1 (permalink)  
Antiguo 24/02/2014, 10:05
 
Fecha de Ingreso: diciembre-2012
Mensajes: 249
Antigüedad: 11 años, 4 meses
Puntos: 2
error Duplicate Column name

Hola amigos estoy intentando hacer una validacion y un insert en una misma sentencia:
verificando que ese i.IdContacto = '1' and i.IdEvento='2' de la tabla actual, no sea iguales a los que le quiero ingresar
pero me sale un error:
Duplicate Column name '2'

Código SQL:
Ver original
  1. INSERT INTO inscripciones (IdEvento, IdContacto,IdStatus,Temporal,Usuario)
  2.                     SELECT IdEvento, IdContacto, IdStatus, Temporal, Usuario  
  3.                     FROM (SELECT '2','2',' ','D', 'tusuario' FROM inscripciones) AS tmp
  4.                     WHERE NOT EXISTS (
  5.     SELECT IdContacto,IdEvento
  6. FROM inscripciones
  7. WHERE IdContacto = '2'
  8. AND IdEvento = '2');

Por lo que he leido parace que estoy llamando el mismo id en 2 partes y la sentencia sql no los reconoce pero no encuentro donde es el error.

Les agradeceria una manito

Última edición por summerblack; 24/02/2014 a las 10:51
  #2 (permalink)  
Antiguo 24/02/2014, 13:01
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: error Duplicate Column name

Hola summerblack:

No termino de entender la lógica de tu consulta, pero tienes varios errores bastante graves...

En primer lugar me voy a enfocar en el mensaje de error que mencionas:

Código:
Duplicate Column name '2
Este error está en la última de tus subconsultas, en ella tienes algo como esto:


Código MySQL:
Ver original
  1. mysql> SELECT '2','2',' ','D', 'tusuario' ;
  2. +---+---+---+---+----------+
  3. | 2 | 2 |   | D | tusuario |
  4. +---+---+---+---+----------+
  5. | 2 | 2 |   | D | tusuario |
  6. +---+---+---+---+----------+
  7. 1 row in set (0.00 sec)

Es decir, estás obteniendo valores constantes (2, 2, '', D, tusuario). si observas en la consulta de arriba, la primer columna corresponde A LOS NOMBRES DE CAMPO QUE ASIGNA MySQL de manera automática... OBSERVA QUE HAY DOS CAMPOS CON IDÉNTICO NOMBRE (2)... Esta es la razón del error que te marca... si intentas meter esto como una subconsulta, obtienes el error que te aparece:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM (SELECT '2','2',' ','D', 'tusuario') T;
  2. ERROR 1060 (42S21): Duplicate column name '2'

Ahora bien, ¿cómo corregir este error?, lo que tienes que hacer es asignas ALIAS DISTINTOS a cada campo... es decir, algo como esto:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM
  2.     -> (   SELECT '2' campo1,
  3.     ->            '2' campo2,
  4.     ->            ' ' campo3,
  5.     ->            'D' campo4,
  6.     ->            'tusuario' campo5
  7.     -> ) T;
  8. +--------+--------+--------+--------+----------+
  9. | campo1 | campo2 | campo3 | campo4 | campo5   |
  10. +--------+--------+--------+--------+----------+
  11. | 2      | 2      |        | D      | tusuario |
  12. +--------+--------+--------+--------+----------+
  13. 1 row in set (0.00 sec)

Observa que ahora la primer columna tiene definidos los nombres como campo1, campo2, etc... de tal manera que no importa que el valor de cada campo esté repetido.

Ahora bien, continuando con la consulta, insisto en que no termino de entender qué es lo que pretendes hacer... por un lado haces un SELECT sobre la misma tabla en la que quieres meter los datos... no le encuentro ninguna lógica a eso... creo que es conveniente que comiences por explicarnos mejor qué es lo que estás intentando hacer, igual y existe alguna otra forma para poder implementar el INSERT.

Saludos
Leo
  #3 (permalink)  
Antiguo 24/02/2014, 14:18
 
Fecha de Ingreso: diciembre-2012
Mensajes: 249
Antigüedad: 11 años, 4 meses
Puntos: 2
Respuesta: error Duplicate Column name

Bueno lo que realmente pretendo es una especie de if para insertar, es decir que valide de una vez en la misma consulta en la que inserta y esto es porque tengo un reto y requiero de la menor cantidad de consultas

Lo que ocurre es que a mi php le entra una cadena de Ids, la cual recorro con un for

normalmente lo que yo haria es:

Cita:
Editado: Código de programación no permitido en foros de Bases de Datos


Bueno lo que realmente queria era en vez de hacer las 2 consultas, solo hacer una, y me encontre el WHERE NOT EXISTS y como no sabia muy bien como funcionaba creia que se podia aplicar.

Pero muchas gracias por la paciencia, ahora mi pregunta es.. hay forma de verificar si ese registro ha sido ingresado a la base y si no insertarlo en la misma consula?? y si es una pregunta muy tonta porfavor ignorenla jejej

Gracias

Última edición por gnzsoloyo; 24/02/2014 a las 14:32
  #4 (permalink)  
Antiguo 24/02/2014, 14:33
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, 4 meses
Puntos: 2658
Respuesta: error Duplicate Column name

Cita:
Pero muchas gracias por la paciencia, ahora mi pregunta es.. hay forma de verificar si ese registro ha sido ingresado a la base y si no insertarlo en la misma consula?? y si es una pregunta muy tonta porfavor ignorenla jejej
En MySQL no se admite leer y modificar la misma tabla en la misma consulta, asi que la respuesta es NO. No puedes hacer un INSERT que al mismo tiempo valide en la misma tabla.
Lo que quieres hacer es algo que se hace por medio de stored procedures.
__________________
¿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 24/02/2014, 14:38
 
Fecha de Ingreso: diciembre-2012
Mensajes: 249
Antigüedad: 11 años, 4 meses
Puntos: 2
Respuesta: error Duplicate Column name

ok vale muchas gracias ya todo me quedo mas claro Gracias!!
  #6 (permalink)  
Antiguo 25/02/2014, 08:30
 
Fecha de Ingreso: diciembre-2012
Mensajes: 249
Antigüedad: 11 años, 4 meses
Puntos: 2
Respuesta: error Duplicate Column name

Hola que pena seguir molestando pero resulta que ya cree el procedimiento pero solo me ingresa el primer registro y nunca mas vuelve a ingresar los otros datos

Código MySQL:
Ver original
  1. DELIMITER $$
  2.  
  3. CREATE DEFINER=`root`@`%` PROCEDURE `p_validarInvitado`(IN idContacto VARCHAR(55), IN idEvento VARCHAR(20),IN usuario VARCHAR(55))
  4. DECLARE existe_reg int;
  5. select IdInscripcion into existe_reg FROM inscripciones  WHERE IdContacto=idContacto and IdEvento=idEvento;
  6. if existe_reg is null then
  7. INSERT INTO inscripciones (IdEvento, IdContacto,IdStatus ,Temporal, Usuario) values (idEvento,idContacto,'','D',usuario);
  8. update inscripciones set Temporal ='D' WHERE IdContacto = idContacto and IdEvento=idEvento;
  9.  
  10.  
  11.  

lo llamo desde php:

Cita:
Editado: Código de programación no permitido en foros de BBDD.

pero solo me esta ingresando el primer registro y cuando ingreso los segundos lo unico que esta haciendo es actualizando el temporal. Gracias a quien me pueda ayudar

Última edición por gnzsoloyo; 25/02/2014 a las 09:07

Etiquetas: column, duplicate, select, sql, tabla
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 19:14.