1

Sybaseには2つのテーブルがあります。

TABLE1:部門に関連付けられた部門データとemp_idを保持します:

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

TABLE2:employeeに関連付けられたEmp_Idと複数のAddress_Idを保持します:

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

これらの2つのテーブルを結合し、次の結果を新しいテーブルに挿入します。

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

または、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)を追加することになった場合は保守が容易になります。ビューを使用する他のクエリは変更する必要はありません...

于 2013-03-07T06:46:36.317 に答える