如何使用Mysql脚本

时间:2016-10-22 21:36:16

标签: mysql database

我有一个表:国家(id int,名称varchar(100),sports varchar(300))

------------------------------------
id   |  name  |  Sports
------------------------------------
1    | USA    | {Football}{Basket}
2    | Canada | {Swimming}
..   | ...    | ...
------------------------------------

为了规范化国家/地区表,我需要一个 MySQL 脚本来遍历国家/地区表中的每一行,然后将该运动提取到一个新表 Sport(id,sportName)。 像这样:

---------------------------------
id  |  sport
---------------------------------
1          | Football
2          | Basket
3          | Swimming
..         | .....
-----------------------------------

最后 我需要创建一个表 Country_Sports 来保存每个国家/地区,例如:  Country_Sports(country_id,sport_id)。**

-----------------------------
country_id   | sport_id
-----------------------------
1            | 2
1            | 3
3            | 1 
-------------------------

我创建了一个分隔" {" "}" ,但仍然不够,因为我不知道如何使用它来提取每个国家的所有运动。

CREATE FUNCTION SPLIT_STR(
x VARCHAR(255),
delim VARCHAR(12),
pos INT
)
RETURNS VARCHAR(255)
RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos),
CHAR_LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1),
delim, '');

示例:

 SPLIT_STR(Sports, '{', 2)

1 个答案:

答案 0 :(得分:0)

由于您已创建表格国家/地区,现在可以从表格创建表格运动 国家与此相同 列如下

create table sport as select * from country;
select * from sport;

这只是意味着将使用country表中的所有列和行 创建体育表。

补充:

你的问题有些令人困惑。如果你在谈论单独查询记录,你可以 使用ID或国家/地区名称

例如,查询美国的体育专栏作为国家,它变为

select name from country where id=1;   or

select * from country where name='USA';

因此,要将加拿大的体育专栏作为国家/地区进行查询,它就变为

select name from country where id=2;   or

select * from country where name='Canada';

如果这不是您想要的,请您组织您的问题,以便我们了解您。