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

Column 'nombre' in where clause is ambiguous en consulta inversa

Estas en el tema de Column 'nombre' in where clause is ambiguous en consulta inversa en el foro de Mysql en Foros del Web. Hola, por comodidad y rapidez tengo unas tablas con estructura inversa en vez de consultar los registros consulto los campos de dichas tablas, sacando los ...
  #1 (permalink)  
Antiguo 23/02/2010, 11:17
 
Fecha de Ingreso: octubre-2008
Mensajes: 168
Antigüedad: 15 años, 5 meses
Puntos: 2
Pregunta Column 'nombre' in where clause is ambiguous en consulta inversa

Hola, por comodidad y rapidez tengo unas tablas con estructura inversa en vez de consultar los registros consulto los campos de dichas tablas, sacando los registros de esos campos. O sea en vez de tener un campo categoría, tengo un campo para cada categoría y sólo tengo que marcar el campo con algo para que el registro quede asimilado en esa categoría lo hice para ahorrar tiempo.
La tabla de datos funciona perfectamente con esa estructura inversa el problema viene cuando quiero consultar dos tablas que tienen el mismo campo, si en vez de mandar campos mando registros funciona perfectamente pero si es un campo igual en las dos tablas imposible.

select * from coches, marcas where coches.nombre=marcas.nombre and marcas.nombre=nombre.

No pongo 'nombre' porque no es un registro lo que mando por POST si no un campo quiero sacar todos los registros de ese campo
o lo que es lo mismo
select * from coches, marcas where coches.nombre=nombre and marcas.nombre=nombre

Column 'nombre' in where clause is ambiguous
  #2 (permalink)  
Antiguo 23/02/2010, 12:19
Avatar de eulloa  
Fecha de Ingreso: octubre-2007
Ubicación: Donde caiga la noche, si mi hijo me deja
Mensajes: 691
Antigüedad: 16 años, 6 meses
Puntos: 5
Respuesta: Column 'nombre' in where clause is ambiguous en consulta inversa

No se si soy muy imbécil o el problema es claro
El ultimo campo 'nombre' ¿a quien te refieres? MySQL debe estarte diciendo eso, a eso se refiere la ambiguedad, digo

Cita:
select * from coches, marcas where coches.nombre=marcas.nombre and marcas.nombre=nombre.
  #3 (permalink)  
Antiguo 24/02/2010, 05:32
 
Fecha de Ingreso: octubre-2008
Mensajes: 168
Antigüedad: 15 años, 5 meses
Puntos: 2
Respuesta: Column 'nombre' in where clause is ambiguous en consulta inversa

Cita:
Iniciado por eulloa Ver Mensaje
No se si soy muy imbécil o el problema es claro
El ultimo campo 'nombre' ¿a quien te refieres? MySQL debe estarte diciendo eso, a eso se refiere la ambiguedad, digo
Es el campo nombre y mando el nombre por post, tengo dos tablas con el mismo campo nombre y quiero hacer una consulta con las dos tablas a la vez, que me saque todos los registros de los dos campos, pero al tener el mismo nombre los dos campos me dice que es ambiguo.
  #4 (permalink)  
Antiguo 24/02/2010, 07:03
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: Column 'nombre' in where clause is ambiguous en consulta inversa

Código MySQL:
Ver original
  1. FROM coches C INNER JOIN marcas M ON C.nombre = M.nombre;

El error sale en el último punto:
Cita:
and marcas.nombre=nombre.
Ese campo no está determinado de dónde sale, es decir, a qué tabla pertenece. Si la idea era usar una variable para poner ese dato, entonces el código en general estaba incompleto o mal redactado.
Por otro lado, cuando tienes una relación de datos como la que estás poniendo (al vincular dos tablas sobre un campo), eso no se hace en el WHERE sino por JOINs. Es cierto que ponerlo en el WHERE funciona, pero el problema es la falta de optimización de la consulta, ya que el WHERE no es optimizable por el MySQL y el FROM... JOIN si.
__________________
¿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/2010, 07:59
 
Fecha de Ingreso: octubre-2008
Mensajes: 168
Antigüedad: 15 años, 5 meses
Puntos: 2
Respuesta: Column 'nombre' in where clause is ambiguous en consulta inversa

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Código MySQL:
Ver original
  1. FROM coches C INNER JOIN marcas M ON C.nombre = M.nombre;

El error sale en el último punto: Ese campo no está determinado de dónde sale, es decir, a qué tabla pertenece. Si la idea era usar una variable para poner ese dato, entonces el código en general estaba incompleto o mal redactado.
Por otro lado, cuando tienes una relación de datos como la que estás poniendo (al vincular dos tablas sobre un campo), eso no se hace en el WHERE sino por JOINs. Es cierto que ponerlo en el WHERE funciona, pero el problema es la falta de optimización de la consulta, ya que el WHERE no es optimizable por el MySQL y el FROM... JOIN si.

OK, funciona, he mirado lo del INNER JOIN y si se hace con el WHERE se denomina INNER JOIN implícito.

Gracias
  #6 (permalink)  
Antiguo 24/02/2010, 08:16
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: Column 'nombre' in where clause is ambiguous en consulta inversa

Prueba usando EXPLAIN con cada versión de la consulta y comprueba cual te conviene para tu caso.
Es la mejor forma de definir cuál es óptima en un escenario dado.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: column, nombre
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 03:15.