我有两个表,我想创建一个加入另外两个表的第三个表。 我的目的是创建一个CRUD应用程序来切换员工的部门
表员工:
| id | Name | Other |
|----|------|-------|
| 1 | John | x |
| 2 | Jack | y |
| 3 | Phil | z |
表部门:
| id | Name| Zone |
|----|-----|------|
| 1 | WH1 | a |
| 2 | WH2 | b |
| 3 | WH3 | c |
我想创建一个名为Situation的第三个表,该表具有员工姓名和部门名称和区域。
怎么做? 而且,这是最好的做法吗? 每个员工都经常在部门之间切换。
由于
答案 0 :(得分:1)
跟进我上面的评论:
首先创建交叉引用表
create table employee_dept_cross_ref (employee_id int, department_id int, startdate datetime, enddate datetime)
当员工更换部门时,使用enddate = null的employeeid填充enddate以获取任何记录并插入新映射
update employee_dept_cross_ref set enddate=getdate() where employeeid=@employee_id and departmentid<>@department_id and enddate is null
insert employee_dept_cross_ref
values
(@employee_id, @department_id, getdate(), null)
然后将您的应用指向拉动enddate为空的映射
答案 1 :(得分:0)
您可以使用表格保存员工ID和部门ID(现在员工正在工作)。然后,您可以创建一个选择加入Employee和部门检索额外信息(如员工姓名或部门区域)。这是最常见的情况。如果您遇到性能问题(我确定不行),您可以包括调优任务(例如名称重复,区域重复,但这在EmployeeDepartment更新中最不成功)。
答案 2 :(得分:0)
由于您的每个员工只有一个部门,最佳做法是在员工表中添加附加列,该表将引用给定的部门雇员。
表员工:
| id | Name | Other | Department_Id
|----|------|-------|--------------
| 1 | John | x | 1
| 2 | Jack | y | 1
| 3 | Phil | z | 2
表部门:
| id | Name| Zone |
|----|-----|------|
| 1 | WH1 | a |
| 2 | WH2 | b |
| 3 | WH3 | c |
现在您执行 JOIN ,例如:
SELECT e.id,
e.Name,
d.Name AS Department_Name,
d.zone AS Department_Zone
FROM Employees e JOIN Departments d
ON e.Department_Id = d.id
然后,您将在同一行中看到您的员工及其部门:
| id | Name | Department_Name | Department_Zone |
|----|------|-----------------|-----------------|
| 1 | John | WH1 | a |
| 2 | Jack | WH1 | a |
| 3 | Phil | WH3 | c |
要保存此选择的结果,您可以使用 SELECT INTO :
SELECT e.id,
e.Name,
d.Name AS Department_Name,
d.zone AS Department_Zone
INTO employee_departments
FROM Employees e JOIN Departments d
ON e.Department_Id = d.id
这会将所有新创建的信息保存到 employee_departments 表中。
答案 3 :(得分:0)
Employees表和Departments表之间需要有关系。理想情况下,employees表(外键)中应该有一个dept_id列。这是将员工与部门关联以便您可以填充名为“SITUATION”的表的必要条件。如果您不需要存储数据,则只需创建一个视图即可。如果Employees表中有dept_id,那么编写SQL就可以这样:
SELECT E.NAME AS EMPLOYEE_NAME,
D.NAME AS DEPARTMENT_NAME
FROM EMPLOYEES E,
DEPARTMENTS D
WHERE E.DEPT_ID = D.DEPT_ID;
我希望这有用。