根据旧记录创建新记录

时间:2018-03-08 18:29:13

标签: sql postgresql

我有一张旧桌子,如下所示。我们正在修改数据结构。

员工:

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中执行此操作?

1 个答案:

答案 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));