基本上,我有一个电话簿,但电话簿有“公司”的重复记录 而重复的记录并不完全重复...:\
我认为一个例子会更好地解释:
演示记录:
1. Company A, Address A, Phone A
2. Company A, Address A, Phone B
3. Company A, Address A, Phone C
4. Company A, Address B, Phone A
我想要的是制作一个新表,其中将所有“公司A”,“地址A”电话号码填入一个记录中,因此结果应该是这样的: 公司A,地址A,电话A,电话B,电话C等。
第二个问题是“公司A”也可能有点不同,例如:
1. Company XYZ, Address A, Phone A
2. Company ABC, Address A, Phone A
我甚至不知道如何从这开始。 我想通过编写一些c#应用程序来做到这一点, 但我认为使用纯mysql可能会有一个更简单的解决方案。
答案 0 :(得分:0)
不完全是一个答案,而是一种不同的方法
为什么没有
company | company_id | ...
address_id | company_id | ...
phone_id | address_id | ...
通过这种方式,您可以为每个公司提供尽可能多的地址,并为每个地址提供尽可能多的电话号码,而无需在将来更改SQL架构
答案 1 :(得分:0)
你的方式不能保持正常化,
但是,以下可能是您正在寻找的
创建新表:
create table new_table
(
company_a varchar(255),
address_a varchar(255),
phone_a varchar(255),
phone_b varchar(255),
phone_c varchar(255)
); // define your index
插入新表:
假设手机不包含,
insert into new_table
select
company,
address,
substring_index(group_concat(phone), ',', 1)
as phone_a,
substring_index(
substring_index(group_concat(phone), ',', 2), ',', -1
) as phone_b,
substring_index(group_concat(phone), ',', -1)
from
old_table
group by company, address;