2011-02-23 41 views
0

好的,我将首先解释我有什么,以及我需要的结果。mysql从一个表中获取数据到另一个表,同时分组记录和额外字段

基本上,我有一个电话簿,但是电话簿中是否有“公司” 重复的记录,而重复记录不完全复制...:\

我认为一个例子清楚地解释:

演示记录:

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,下面可能是你正在寻找

创建新表:

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; 
+0

对不起,我甚至不明白你的答案:),我试图编译它是,但第二个子字符串得到一个错误。可耻的是我:( – Dementic 2011-02-23 19:05:15

+0

'为 – ajreal 2011-02-23 19:11:11

+0

MySQL工作台是returing一个“失落的连接”,而excuting。这是一个1.5米的记录表,我尝试从现在从命令行运行它。 – Dementic 2011-02-23 19:56:18

0

不完全是一个答案,但不同的方法

为什么不

  • 一个表公司

company | company_id | ...

  • 表地址

address_id | company_id | ...

  • 和一张桌子电话

phone_id | address_id | ...

这种方式,您可以有每家公司为多个地址,每个地址作为许多电话号码,而无需改变你的SQL架构中未来

+0

你编辑你的问题,因为我是通过添加“第二个问题”部分。这增加了以前只有1对多关系的多对多关系。这将需要添加一张额外的表来映射地址往返公司 – Damp 2011-02-23 18:50:16

+0

好吧,我明白你的方向是什么, 但结果将用于“传单”营销。 ECE公司,在一个不同的地址应该通过邮寄得到报价。 所以,我需要将它们分开记录,但每个记录应该包含“地址A”中关于“公司A”的尽可能多的字段。所有这些都集成到我为客户开发的新软件中。 – Dementic 2011-02-23 18:55:29

相关问题