我有一张旧桌子,如下所示。我们正在修改数据结构。
员工:
Emp_ID Dep profile
345 808 16
345 813 14
345 809
我必须在新表中填充记录,如下所示:
员工:
Emp_ID Dep Profile
345 808 16
345 808 14
345 813 16
345 813 14
345 809 16
345 809 14
我如何在Postgres中执行此操作?
答案 0 :(得分:1)
您需要emp_id
组中的某种交叉联接:
select *
from (
select emp_id, dep
from employee
where dep is not null
) t1
join (
select emp_id, profile
from employee
where profile is not null
) t2 using(emp_id)
emp_id | dep | profile
--------+-----+---------
345 | 808 | 16
345 | 808 | 14
345 | 813 | 16
345 | 813 | 14
345 | 809 | 16
345 | 809 | 14
(6 rows)
我必须添加我不喜欢这个新模型。标准化解决方案可能如下所示:
create table employees(
emp_id int primary key);
create table departments(
dep_id int,
emp_id int references employee,
primary key (dep_id, emp_id));
create table profiles(
profile_id int,
emp_id int references employee,
primary key (profile_id, emp_id));