Sybase,从多个表的select语句创建一个新表

时间:2013-03-07 06:11:47

标签: sql insert sybase union

我在Sybase中有两个表:

TABLE1:保存与部门关联的部门数据和emp_id:

Dept_Id     Emp_id1   Emp_id2   Emp_id3
-------     -------   -------   -------
DEP1          11        22        33

TABLE2:保存与员工关联的Emp_Id和多个Address_Id:

Emp_Id     Add_Id
------    --------
11         street1
11         street2
11         street3
22         mountRoad1
22         mountRoad2
33         PetersRoad

我想加入这两个表并将以下结果插入到新表中:

Dept_Id   Emp_Id   Add_Id
-------   ------   ------
DEP1       11       street1
DEP1       11       street2
DEP1       11       street3
DEP1       22       mountRoad1
DEP1       22       mountRoad2
DEP1       33       PetersRoad

如何使用单个SQL查询实现此目的?

3 个答案:

答案 0 :(得分:3)

为什么不仅使用JOIN:

insert into table3 (Dep_id,Emp_id, Add_id)
select table1.Dep_id, table2.Emp_id, Table2.Add_id
from table1 
join table2 on table1.Emp_id1=table2.Emp_id or table1.Emp_id2=table2.Emp_id or table1.Emp_id3=table2.Emp_id

答案 1 :(得分:0)

我认为你应该使用UNION。例如:

Insert into Table 3 (Dep_id,Emp_id, Add_id)
select Dep_id,Emp_id1 as Emp_id, Table2.Add_id
from Table 1 
join Table2 on (Table1.Emp_id1=Table2.Emp_id)
union all
select Dep_id,Emp_id2 as Emp_id, Table2.Add_id
from Table 1 
join Table2 on (Table1.Emp_id2=Table2.Emp_id)
union all
select Dep_id,Emp_id3 as Emp_id, Table2.Add_id
from Table 1 
join Table2 on (Table1.Emp_id3=Table2.Emp_id)

PS:如果你需要添加Emp_id4怎么办?您的表结构未规范化。

答案 2 :(得分:0)

如果你坚持使用table1的愚蠢结构,那么我可能会创建一个视图来人为地将结构更改为一个简单的部门,员工表。像这样:

create view EmployeeDepartment
as 
    select Dept_Id, Emp_id1 as Emp_id from Table1
    union select Dept_Id, Emp_id2 as Emp_id from Table1
    union select Dept_Id, Emp_id3 as Emp_id from Table1

然后,您可以根据需要使用此视图,例如选择部门/员工/地址

select e.Dept_Id, e.Emp_Id, a.Add_Id
from Table_2 a
join EmployeeDepartment e on e.Emp_id = a.Emp_id

或者建立你的第3张桌子

insert into table3 (Dep_id, Emp_id, Add_id)
select e.Dept_Id, e.Emp_Id, a.Add_Id
from Table_2 a
join EmployeeDepartment e on e.Emp_id = a.Emp_id

另一方面,它同样容易查询视图选择来构建你的第3个表

insert into table3 (Dep_id, Emp_id, Add_id)
select e.Dept_Id, e.Emp_Id, a.Add_Id
from Table_2 a
join (
    select Dept_Id, Emp_id1 as Emp_id from Table1
    union select Dept_Id, Emp_id2 as Emp_id from Table1
    union select Dept_Id, Emp_id3 as Emp_id from Table1) e 
on e.Emp_id = a.Emp_id

当然,如果您有其他方案并且最终添加第4个员工ID(emp_id4)时更容易维护,则视图更可重用。使用该视图的其他查询不需要更改...