1

我目前有一个 34,930,054 行的 MySQL 数据库,其格式设置为条目(以前的编码人员的工作)位于 3 列表中的多行中,即:

Part number 1 | height | 5cm  
Part number 1 | length | 10cm  
Part number 1 | width  | 5cm   
Part number 2 | length | 1cm  
Part number 2 | height | 3cm  
Part number 2 | width  | 8cm

我想将数据合并到一个更干净的 2 列表中以供以后输出。IE:

Part number 1 | height: 5cm  <br /> length: 10cm <br /> width: 5cm  
Part number 2 | height: 1cm  <br /> length: 3cm <br /> width: 8cm 

如何查找具有相同部件号的所有行,以上述 2 列格式将行插入新表(第 1 列中的部件号以及原始表中第 2 列和第 3 列中的所有数据到新表的第 2 列桌子)?

4

2 回答 2

1

尝试这个:

INSERT INTO parts_new (partnum, description)
SELECT partNum, GROUP_CONCAT(CONCAT(measurement_type, ' : ', measurement_value) 
              ORDER BY FIELD(measurement_type, 'height', 'length', 'width')  
              SEPARATOR ' <br /> ') description
FROM parts_old
GROUP BY partNum

或者

INSERT INTO parts_new (partnum, width, LENGTH, height)
SELECT partNum, SUM(width) width, SUM(LENGTH) LENGTH, SUM(height) height
FROM (SELECT partNum, IF(measurement_type='width', measurement_value, 0) width, 
        IF(measurement_type='height', measurement_value, 0) height, 
        IF(measurement_type='length', measurement_value, 0) LENGTH
FROM parts_old) AS A
GROUP BY partNum

检查链接MySQL INSERT INTO...SELECT

于 2012-12-11T05:24:18.557 回答
0

由于我不知道您的真实表名和列名,因此我将假装它们看起来像这样:

part_old(数据库表)

partnum   measurement_type  measurement_value
-------   ----------------  -----------------
1         width             5
1         length            10
1         height            5
2         width             8
2         length            1
2         height            3

如果我正确理解您的问题,您希望得到以下结果:

part_new(数据库表)

partnum   width  length  height
-------   -----  ------  ------
1         5      10      5
2         8      1       3

使用正确的列类型构建新表后,您可以使用以下 SQL 将数据从旧表迁移到新表:

insert into parts_new (partnum, width, length, height)
(
    select 
        h.partnum as partnum,
        w.measurement_value as width,
        l.measurement_value as length,
        h.measurement_value as height 
    from 
        parts_old as w
    inner join 
        parts_old as l on l.partnum = w.partnum
    inner join
        parts_old as h on h.partnum = w.partnum
    where 
        w.measurement_type = 'width'
        and
        l.measurement_type = 'length'
        and
        h.measurement_type = 'height'    
    group by 
        h.partnum
)

我使用 Sequel Pro 在 MySQL 5.1 上对此进行了测试,以确保它可以正常工作。

于 2012-12-11T05:46:03.907 回答