2012-05-22 35 views
0

我正在使用InnoDB版本的MySQL 全球数据库(可用here),并且正在尝试获取南美国家及其首都的列表。在我的印象中,查询应该是这样的:加入之后未找到字段

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

但是,一个给了错误#1054 - Unknown column 'Country.Name' in 'field list',即使表Country确实有场Name

为什么MySQL没有找到我想要的字段?如何更改查询以使其找到它们?

让我知道,如果我需要提供更多的信息给你,能够帮助我。

回答

2

如果您引用标识符,请不要用反引号包围内点。

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

如果你周围的内部点的引用,它会被假定为列名内,而不是表名和列名之间的分隔符 - 您有一个名为Name列,但不是,称为Country.Name。然而,在这种情况下,没有必要引用任何标识符,因为它们都不是MySQL reserved keywords

+0

尽量避免反弹,除非你真的需要它们。正如@Michael指出的那样,当标识符与MySQL保留关键字冲突时,反引号很有用。 –

+0

谢谢,它的工作。我想,一个容易接受的训练有素的眼睛。我读过反引号是没有必要的,但是我能从避免它们中获得什么吗?我在某个地方看到一个人在升级过程中遇到了麻烦,因为他的一个非支持字段名称在后来的MySQL版本中已成为保留关键字。 – Johanna

+1

@JohannaLindh你没有获得任何避免它们。虽然MySQL并不经常添加新的保留字。如果你养成了总是引用的习惯,那就好了。我更倾向于避免使用类似保留字的内容,而不是引用自己。 –

0

这似乎是一个语法问题:

尝试使用这个:

`Country`.`Name` 

country.name(蜱)将是字段的名称,当你以后是什么

`country`.`name` 
+0

谢谢!初学者的错误。 :) – Johanna

2

尝试修改您的后退滴答。

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

不要把它们放在整个table.column周围,而是围绕它们单独放置它们之间的周期。

也国会大厦应该是单引号,而不是后面的蜱虫。

+0

谢谢 - 也用于指出反引号! – Johanna

相关问题