加入两个表来创建第三个sql

时间:2018-05-22 18:29:57

标签: sql

我有两个表,我想创建一个加入另外两个表的第三个表。 我的目的是创建一个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的第三个表,该表具有员工姓名和部门名称和区域。

  • 一名员工只能在一个部门
  • 一个部门可以包含更多员工,但也可以包含零

怎么做? 而且,这是最好的做法吗? 每个员工都经常在部门之间切换。

由于

4 个答案:

答案 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;

我希望这有用。