1

我在 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 查询来实现这一点?

4

3 回答 3

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
于 2013-03-07T07:07:36.847 回答
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 怎么办????您的表结构未标准化。

于 2013-03-07T06:17:36.497 回答
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

或者建立你的第三张桌子

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

另一方面,子查询视图选择以构建您的第三个表同样容易

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

当然,如果您有其他场景,视图更可重用,如果您最终添加第四个员工 ID (emp_id4),则更易于维护。使用视图的其他查询不需要更改...

于 2013-03-07T06:46:36.317 回答