我遇到了SQL查询的问题
我的表格有两列,employee_name
,phone_number
。这个表有100行。
我想将employee_name
存储在一个表中,将phone_number
存储在另一个表中并建立关系。我将解释架构
EmployeeTable中
emp_id (identity)
emp_name (text)
ph_id (FK from the phone table)
手机表
ph_id (identity)
phone_number
所以我试过
insert into emp_table (emp_name, ph_id)
select employee_name, (insert into phone_table output inserted.ph_id values (whole.phone)) as phone_id
这个查询错了。但这就是我想要做的。
我想在电话号码表中插入电话号码,并在同一个选择语句中输入身份并插入员工表。
你的想法?
决赛桌应为
整张桌子(这就是我现在拥有的)
emp_name phone_number
----------------------
name1 123
name2 456
name4 789
并在执行查询后
employee_table
name ph_id
-------------
name1 1
name2 2
name3 3
phone_table
phone_id phone_number
-------------------------
1 123
2 456
3 789
答案 0 :(得分:1)
不确定您的目标表结构是否应该如此,但这样可以解决问题中的问题。
首先为每个不同电话号码向phone_table
插入一行,然后插入employee_table
并加入whole_table
和phone_table
之间的联接phone_number
insert into phone_table(phone_number)
select distinct phone_number
from whole_table
insert into employee_table(name, ph_id)
select w.emp_name, p.phone_id
from whole_table as w
inner join phone_table as p
on w.phone_number = p.phone_number
<强>更新强>
您可以使用here所述的merge ... output
来处理电话号码和姓名的重复。
使用表变量中生成的id捕获源数据,并使用insert语句中的表变量。
declare @T table
(
phone_id int,
emp_name varchar(10),
phone_number varchar(10)
);
merge phone_table as p
using whole_table as w
on 0 = 1
when not matched then
insert (phone_number) values (w.phone_number)
output inserted.phone_id,
w.emp_name,
w.phone_number
into @T(phone_id, emp_name, phone_number);
insert into employee_table(name, ph_id)
select t.emp_name, t.phone_id
from @T as t;
答案 1 :(得分:0)
使用@@ Identity。像这样:
insert into phoneTable(phone_number) values('999888777');
declare @phoneid int
set @phoneid = @@IDENTITY
insert into EmployeeTable(emp_name, ph_id) values('John Supakin', @phoneid)
或者,就这样。但是在长时间的查询中要小心。
insert into phoneTable(phone_number) values('999888777');
insert into EmployeeTable(emp_name, ph_id) values('John Supakin', @@IDENTITY)
答案 2 :(得分:0)
您必须分成两个不同的SQL。一个插入EmployeeTable,另一个插入phonetable。