【发布时间】:2015-11-12 19:53:09
【问题描述】:
我有三个给定的表:
国家
Id | code | name
-------------------------
1 | DE | Germany
2 | IT | Italy
3 | ES | Spain
4 | FR | France
货币
Id | code | name
-------------------------------
1 | EUR | Euro
2 | USD | US Dollors
3 | CAD | Canadian Dollors
国家/地区货币
country_id | currency_id | ranking
-------------------------------------------
1 | 1 | 5
1 | 2 | 10
1 | 3 | 15
2 | 1 | 5
3 | 1 | 10
4 | 2 | 5
4 | 3 | 10
正如您在第三张表中看到的,country_id => 1 分配了三种不同排名的货币。换句话说,德国有三种指定货币(欧元、美元和加元)。因此,EUR 应该与德国一起显示,因为它有 5 个最低排名。
对于意大利和西班牙,仅分配了currency_id => 1 (EUR)。因此,应该为意大利和西班牙显示 EUR。
对于法国,currency_id => 2 和 currency_id => 3(美元和加元),但美元在法国排中排名最低。所以,美元应该与法国一起显示。
预期结果
country | currency
---------------------------
Germany | EUR
Italy | EUR
Spain | EUR
France | USD
我的查询
select country.name, currency.code from country_currency
inner join country on country.id = currency_country.country_id
inner join currency on currency.id = currency_country.currency_id
order by ranking asc
group by country_id
它根本不起作用。谁能帮我解决这个问题?
【问题讨论】:
-
请分享您正在处理的 SQL 查询,有人会帮助修复它。
-
好的,我现在就去做。
-
两个货币可以与一个国家的最小值相同吗?像法国一样都有 5 个?
-
没有。在我的桌子上,它总是不同的。假设它们彼此不同。但具有相同的最小值。我们可以选择任何一个。
-
在 OP 的问题中添加了 SQLFIDDLE:sqlfiddle.com/#!9/1eb2c7
标签: mysql sql inner-join