【发布时间】:2013-07-24 01:55:20
【问题描述】:
我搜索了很多,但没有找到适合我的问题的解决方案。
我想做什么?
我在 MySQL 中有 2 个表: - 国家 - 货币 (我通过 CountryCurrency 将它们连接在一起 --> 由于多对多关系)
查看此示例以获取工作示例:http://sqlfiddle.com/#!2/317d3/8/0
我想使用连接将两个表链接在一起,但我想每个国家只显示一行(有些国家有多种货币,所以这是第一个问题)。
我找到了 group_concat 函数:
SELECT country.Name, country.ISOCode_2, group_concat(currency.name) AS currency
FROM country
INNER JOIN countryCurrency ON country.country_id = countryCurrency.country_id
INNER JOIN currency ON currency.currency_id = countryCurrency.currency_id
GROUP BY country.name
这有以下结果:
NAME ISOCODE_2 CURRENCY
Afghanistan AF Afghani
Åland Islands AX Euro
Albania AL Lek
Algeria DZ Algerian Dinar
American Samoa AS US Dollar,Kwanza,East Caribbean Dollar
但我现在想要的是将货币拆分为不同的列(货币 1、货币 2、...)。我已经尝试过 MAKE_SET() 之类的函数,但这不起作用。
【问题讨论】:
-
SQL 不支持动态列数。您必须在应用程序中执行此操作。
-
您可以在光标中使用逻辑来执行此操作。但是游标首先必须查看您的结果集需要多少列数据。动态创建一个临时表来填充和稍后选择。动态的列数是这个挑战的问题。
标签: mysql sql group-concat