No encontrar el campo después de unirse

Estoy trabajando con la versión InnoDB de MySQL mundo base de datos (disponible aquí) y estoy tratando de obtener una lista de los países de América del Sur y sus capitales. En mi mente, la consulta debería verse así:

    SELECT `Country.Name` as `CountryName`, `City.Name` as `CityName`
    FROM `Country`, `City` 
    WHERE `Continent` = 'South America' AND `ID` = `Capital`;

Pero ese da error #1054 - Unknown column 'Country.Name' in 'field list', aunque la mesa Country tiene el campo Name.

¿Por qué MySQL no encuentra los campos que quiero? ¿Cómo cambio la consulta para que los encuentre?

Avíseme si necesito proporcionar más información para que pueda ayudarme.

preguntado el 22 de mayo de 12 a las 18:05

3 Respuestas

Si cita identificadores, no rodee el punto interior con acentos graves.

SELECT
  `Country`.`Name` AS CountryName,
  `City`.`Name` AS CityName

Si cita alrededor del punto interior, se supondrá que está dentro del nombre de la columna, en lugar de un separador entre el nombre de la tabla y el nombre de la columna; tiene una columna llamada Name, pero no un visión de conjunto , que son Country.Name. En este caso, sin embargo, no es necesario citar ninguno de los identificadores ya que ninguno de ellos es Palabras clave reservadas de MySQL.

contestado el 22 de mayo de 12 a las 18:05

Trate de evitar los acentos graves a menos que realmente los necesite. Como señaló @Michael, los acentos graves son útiles cuando los identificadores chocan con las palabras clave reservadas de MySQL. - Usuario web

Gracias, está funcionando. Una captura fácil para un ojo entrenado, supongo. He leído que los acentos graves no son necesarios, pero ¿gano algo si los evito? Leí en alguna parte que un tipo tuvo problemas durante una actualización porque uno de sus nombres de campo sin comillas invertidas se había convertido en una palabra clave reservada en una versión posterior de MySQL. - Johanna

@JohannaLindh No ganas nada evitándolos. Sin embargo, MySQL no suele agregar nuevas palabras reservadas. Si te acostumbras a citar siempre, está bien. Soy más propenso a evitar usar cualquier cosa que se parezca a una palabra reservada que citarme a mí mismo. - Michael Berkowski

Intente modificar sus tics de retroceso.

SELECT 
    `Country`.`Name` as `CountryName`,
    `City`.`Name` as `CityName` 
FROM `Country`, `City`
WHERE `Continent` = 'South America' AND `ID` = 'Capital';

No los coloque alrededor de toda la tabla.columna, sino alrededor de ellos individualmente con el punto entre ellos.

Además, el capitolio debe ser comillas simples y no tildes invertidas.

contestado el 23 de mayo de 12 a las 15:05

Esto parece ser un problema de sintaxis:

Intente usar esto en su lugar:

`Country`.`Name`

country.name (en ticks) sería el nombre del campo cuando lo que busca es

`country`.`name`

contestado el 22 de mayo de 12 a las 18:05

¡Gracias! Error de principiante. :) - Johanna

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.