mysql将数据从一个表获取到另一个表,同时对记录和额外字段进行分组

时间:2011-02-23 18:25:03

标签: 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可能会有一个更简单的解决方案。

2 个答案:

答案 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;