2016-02-05 33 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。它应该做同样的事情。 –