2012-05-22 32 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

相關問題