2014-10-04 42 views
0

我很難搞清楚這條SQL語句。我想列出所有城市,他們的人口和城市所在的國家。事情是有兩個表需要使用。兩個表都被標記相同,即國家(表)名(列)和城市(表)名(列)想要添加臨時列的SQL遇到問題

SELECT 
    Name, Population, Country.name AS Country 
FROM 
    City, Country.name AS Country 
WHERE 
    Country.Name = (SELECT Name FROM Country); 

我收到此錯誤列

錯誤代碼:1146表「country.name」不存在

現在我不知道這是正確的道路,得到我的回答,我不過纔開始使用這個工具,我也讀了這本書現代數據庫管理第十一版,也許我只是不明白這個部分呢。

+1

你能編輯你的問題並添加表格模式嗎?另外,這是哪個DBMS? – ekad 2014-10-04 10:57:11

+0

'Country.Name =(SELECT Name FROM Country)'沒有任何意義(你基本上是將列與自己進行比較)Plus:在FROM部分中,只能使用表格,而不能使用列。我非常懷疑'country.name'包含與'city.name'相同的值(除非您同時存儲的是同一城市的國家) – 2014-10-04 10:59:18

回答

1

使用別名和連接,它會使查詢更易於閱讀和理解。 您需要使用城市臺和Country表之間的關係,使事情的工作:

SELECT 
ci.Name as City, ci.Population, co.Name as Country 
FROM 
City ci 
INNER JOIN Country co ON co.Id = ci.CountryId 
0

如果你沒有一個表名爲Country.name那麼這行是不正確

FROM City, Country.name AS Country 

很簡單,因爲你應該從表中選擇一個名爲name的列。使用

正確的語法WHERE子句來連接兩個表是:

SELECT City.Name, City.Population, Country.name AS Country 
FROM City, Country 
WHERE Country.Name = City.CountryName 

假設你有一個領域CountryNameCity因爲你行

WHERE Country.Name = (SELECT Name FROM Country); 

是錯誤的,因爲你試圖連接來自Country的字段Name與相同的字段。