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 列のテーブルにマージしたいと考えています。すなわち:

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

実際のテーブル名と列名がわからないので、次のようなふりをします。

parts_old (データベーステーブル)

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

私があなたの質問を正しく理解しているなら、あなたは次のようになりたいと思っています:

parts_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 に答える