我有一个包含以下列的非规范化表(例如 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
我想将其转换为另一个表(例如表B(,其中包含唯一的黑白TableA_ID和Cat_IDs关联。
表B结构式
Assoc_Id serial,
TableA_ID int,
Cat_ID int;
表 B 将具有关联条目(来自表 A(,如下所示:
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
有人可以帮忙吗?
提前谢谢。
优雅是好的,但有时简单的蛮力就足够了。 特别是关于应该是 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 ;