我有一个表:国家(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)
答案 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';
如果这不是您想要的,请您组织您的问题,以便我们了解您。