我有一个带有以下列的非规范化表(例如TableA):
TableA_Id
Cat1
Cat2
Cat3
Cat4
Cat5
Cat6
带有以下条目:
TableA_ID | Cat1 | Cat2 | Cat3 | Cat4 | Cat5 | Cat6
1 | 32 | 29 | NULL | NULL | NULL | NULL
2 | 30 | 56 | 89 | NULL | NULL | NULL
3 | 32 | NULL| NULL | NULL | NULL | NULL
4 | 55 | 65 | 32 | 69 | 3 | 9
我想将其转换为另一个表(例如TableB),该表包含b / w TableA_ID和Cat_ID的唯一关联。
TableB结构
Assoc_Id serial,
TableA_ID int,
Cat_ID int;
并且TableB将具有关联条目(来自TableA),例如:
Assoc_Id | TableA_ID | Cat_ID
1 | 1 | 32
2 | 1 | 29
3 | 2 | 30
4 | 2 | 56
5 | 2 | 89
6 | 3 | 32
7 | 4 | 55
8 | 4 | 65
9 | 4 | 32
10 | 4 | 69
11 | 4 | 3
12 | 4 | 9
有人可以帮忙吗?
谢谢。
答案 0 :(得分:0)
优雅很好,但有时候简单的蛮力就足够了。 Esp。应该是1次,或者很少执行。
insert into TableB (TableA_id, Cat_id)
select TableA_id, cat1 from tableA where cat1 is not null union all
select TableA_id, cat2 from tableA where cat2 is not null union all
select TableA_id, cat3 from tableA where cat3 is not null union all
select TableA_id, cat4 from tableA where cat4 is not null union all
select TableA_id, cat5 from tableA where cat5 is not null union all
select TableA_id, cat6 from tableA where cat6 is not null ;