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

Not unique table/alias:

Estas en el tema de Not unique table/alias: en el foro de Mysql en Foros del Web. Hola me aparece este error en una consulta que estoy haciendo Not unique table/alias: 'gb_companias' y ya me mate por encontrarle solucion, espero y alguien ...
  #1 (permalink)  
Antiguo 16/07/2010, 01:12
 
Fecha de Ingreso: septiembre-2004
Ubicación: Chihuahua Mex
Mensajes: 404
Antigüedad: 19 años, 7 meses
Puntos: 2
Pregunta Not unique table/alias:

Hola me aparece este error en una consulta que estoy haciendo Not unique table/alias: 'gb_companias' y ya me mate por encontrarle solucion, espero y alguien de ustedes me pueda ayudar, saludos.

esta es mi consulta
Código MySQL:
Ver original
  1. gb_juegos.nombre,
  2. descripcion,
  3. gb_consolas.nombre,
  4. gb_companias.nombre AS desarrollador,
  5. gb_companias.nombre AS publicador,
  6. gb_generos.nombre AS genero,
  7. fecha,
  8. esrb,
  9. caja
  10. FROM gb_juegos
  11. gb_consolas
  12. gb_juegos.id_consola = gb_consolas.id_consola
  13. gb_companias
  14. gb_juegos.id_desarrollador = desarrollador
  15. LEFT JOIN gb_companias
  16. gb_juegos.id_publicador = publicador
  17. borrado = '0'
  18. id_juego = '$id_juego'

Última edición por PANAFLAKIN; 16/07/2010 a las 14:52
  #2 (permalink)  
Antiguo 16/07/2010, 03:47
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: Not unique table/alias:

Respuesta simple: Tienes un nombre de tabla o alias de tabla duplicado.
Código MySQL:
Ver original
  1.    gb_juegos.nombre,  
  2.    descripcion,  
  3.    gb_consolas.nombre,  
  4.    gb_companias.nombre AS desarrollador,
  5.    gb_companias.nombre AS publicador,  
  6.    gb_generos.nombre AS genero,  
  7.    fecha,  
  8.    esrb,  
  9.    caja
  10. FROM  
  11.    gb_juegos LEFT JOIN  
  12.    gb_consolas ON gb_juegos.id_consola = gb_consolas.id_consola  LEFT JOIN  
  13.    gb_companias ON gb_juegos.id_desarrollador = desarrollador LEFT JOIN  
  14.    gb_companias ON gb_juegos.id_publicador = publicador
  15. WHERE borrado = '0' AND id_juego = '$id_juego'

Respuesta detallada: Estás invocando dos veces a la misma tabla pero sin usar alias, lo que hace que MySQL no pueda saber a qué tabla te vas a referir con los nombres 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)
  #3 (permalink)  
Antiguo 16/07/2010, 15:03
 
Fecha de Ingreso: septiembre-2004
Ubicación: Chihuahua Mex
Mensajes: 404
Antigüedad: 19 años, 7 meses
Puntos: 2
Respuesta: Not unique table/alias:

Hola perdona mi ignorancia, que otro alias deberia de agregar, pense que al ponerle As desarrollador y As publicador me diferenciaria cada uno.
  #4 (permalink)  
Antiguo 16/07/2010, 15:17
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: Not unique table/alias:

No puede diferenciar las tablas invocadas. Los alias en el SELECT lo que hacen es simplemente cambiar el encabezado de la columna, pero no afectan el origen del dato, que es la tabla.
Los alias se deben aplicar a las tablas cuando invocas dos veces o más la misma tabla, porque sinó ¿cómo hace para saber de qué invocación debe obtener el dato? Piensa que las tablas se llaman igual...
El tema es simple:
Código MySQL:
Ver original
  1.    J.nombre,  
  2.    descripcion,  
  3.    C.nombre,  
  4.    C1.nombre desarrollador,
  5.    C2.nombre publicador,  
  6.    G.nombre genero,  
  7.    fecha,  
  8.    esrb,  
  9.    caja
  10. FROM  
  11.    gb_juegos J LEFT JOIN  
  12.    gb_consolas C ON J.id_consola = C.id_consola  LEFT JOIN  
  13.    gb_companias C1  ON J.id_desarrollador = C1.nombre LEFT JOIN  
  14.    gb_companias C2 ON J.id_publicador = C2.nombre
  15. WHERE borrado = '0' AND J.id_juego = '$id_juego'
Además, hay dos errores adicionales que aún no han saltado:
1) Estás invocando una tabla gb_generos, la cual aún no existe en el FROM.
2) Estás intentado hacer que el JOIN se realice entre un campo de una tabla con el alias del SELECT de otro campo. Esto está mal. Los campos a indicar en el ON sólo pueden ser los de las tablas físicas invocadas, por sus verdaderos nombres. Los alias en el FROM nunca suplantan nombres de campos. Sólo suplantan nombres de tablas.

Tip final: Los alias indicados en el SELECT tampoco se pueden usar en el WHERE. Ningún DBMS los admite, incluido MySQL. Sólo puden usarse en algunas cláusulas como GROUP BY, ORDER BY o HAVING, en tanto no sean alias aplicados a funciones de agregación.
__________________
¿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 16/07/2010, 15:53
 
Fecha de Ingreso: septiembre-2004
Ubicación: Chihuahua Mex
Mensajes: 404
Antigüedad: 19 años, 7 meses
Puntos: 2
Respuesta: Not unique table/alias:

Hola muchas gracias por la ayuda la verdad no tenia ni idea que se podia hacer eso como puedes ver apenas estoy empezando con esto y lo que se lo aprendi de tutoriales sencillos por la red, ya logre que funcionara la consulta. De nuevo gracias.

Etiquetas: Ninguno
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:02.