2016-02-05 65 views
0

比較我有3代表一個與每一個國家在世界上和它的令牌SQL:兩項來自不同表

NAME    CODE 
Afghanistan  AFG 
Albania   AL 
Algeria   DZ 
American Samoa AMSA 
Andorra   AND 
Angola   ANG 
Anguilla   AXA 
(...) 

而且,所有湖泊的表,並在這些國家的所有山脈中的另一個。

LAKE     CODE 
Bodensee    A 
Neusiedlersee  A 
Lake Prespa   AL 
Lake Ohrid   AL 
Lake Skutari   AL 
Lake Eyre   AUS 
Lake Jindabyne  AUS 
Lake Hume   AUS 
Lake Eucumbene  AUS 
Lake Hume   AUS 
Lake Burley Griffin AUS 
(...) 

MOUNTAIN    CODE 
Hochgolling   A 
Hochgolling   A 
Zugspitze   A 
Grossglockner  A 
Jezerce    AL 
Korab    AL 
Uluru    AUS 
Mt. Kosciuszko  AUS 
Mt. Bogong   AUS 
Musala    BG 
Illampu    BOL 
Sajama    BOL 
Licancabur   BOL 
(...) 

我現在必須顯示比湖泊數量少的國家。我現在嘗試了幾個小時,但無法找到解決這個問題的方法。 我試圖一起加入3張表 - 但我無法弄清楚下一步該做什麼。我相信我必須使用嵌套的SQL命令。

這是我在計算每個國家的湖光山色嘗試

SELECT Country.name, count(Geo_lake.code), count(Geo_mountain.code) 
From Country 
INNER JOIN Geo_lake On (Country.code = geo_lake.code) 
INNER JOIn Geo_mountain On (Country.code = geo_mountain.code) 
Group by Country.name; 

但不知何故,兩列數(Geo_lake.country)和count(Geo_mountain.country)似乎有我don'相同的值不知道爲什麼。

+0

請編輯您的問題並顯示解決此問題的嘗試。例如,你有問題要計算一個國家的湖泊數量嗎?山的數量? –

回答

0

通過獲得的款項爲每個單獨啓動關:

# Sum of lakes 
SELECT code, count(*) AS sum FROM lakes GROUP BY code 

# Sum of mountains 
SELECT code, count(*) AS sum FROM mountains GROUP BY code 

結果然後連接在一起,並選擇在山上一個國家的總和小於湖泊的數量所有行:

SELECT l.code AS code, l.sum AS lake_count, m.sum AS mountain_count 
FROM 
(SELECT code, count(*) AS sum FROM lakes GROUP BY code) AS l JOIN 
(SELECT code, count(*) AS sum FROM mountains GROUP BY code) AS m 
ON l.code = m.code 
WHERE m.sum < l.sum 
+0

我收到AS表達式的錯誤, ORA-00933:SQL命令未正確結束 到目前爲止,ORACLE似乎忽略了我嘗試引用的每個別名。 試圖解決沒有別名,但最終與一個SQL查詢糾結。 – Hellcaraxe

+0

在我的解決方法中,我得到的單行子查詢返回多個行錯誤 – Hellcaraxe

+0

嘗試將星號(*)更改爲另一行名稱,例如count。它應該做同樣的事情。 –