我有一个表,其中包含项目经理和项目主管员工ID,例如
projectmanagerId
projectdirectorId
我需要将这些列中的每一列链接到一个employees表,但问题是projectmanagerId列和ProjectDirectorId列都需要链接到2列中的任何一列,例如
JEmployeeId
MEmployeeId
我想过创建一个像这样的联结表
ProjectManagerEmployeeJunction1
-------------------------------
projectmanagerId
JEmployeeId
ProjectManagerEmployeeJunction2
-------------------------------
projectmanagerId
MEmployeeId
和导演类似。这是最好的方法吗?有没有更好的办法。为此创建4个表似乎有点过分了。
答案 0 :(得分:0)
我认为您可以将INNER JOIN
与OR
子句一起使用,例如:
t1 inner join
t2 on projectmanagerId = JEmployeeID or projectmanagerID = MEmployeeID
答案 1 :(得分:0)
我会以类似但略有不同的方式接近它。
不是为ProjectManagers和/或ProjectDirectors创建表,而是为所有员工创建表。
EmployeeIDJunction
------------------
externalID,
EmployeeUniqueID
然后,员工将在表格中有两个条目。 externalID是JEployeeID的一条记录,以及externalID是MEmployeeID的一条记录。然后,EmployeeUnQueID将是您希望的任何 ID,映射到您的员工表。理论上,你可以拥有你喜欢的任意数量,只要它们在整个表中都是不可取的(以避免将一个externalID映射到多个员工)。
Data
INNER JOIN
EmployeeIDJunction
ON EmployeeIDJunction.externalID = Data.EmployeeID
INNER JOIN
Employee
ON Employee.ID = EmployeeIDJunction.EmployeeUniqueID
重新改造。这一切都假设不同的EmployeeID永远不会发生冲突。我不能在一个系统中拥有一个ID,你也可以在另一个系统中拥有一个ID。
如果可能,您需要开始执行诸如为ID添加前缀或使用复合键(如(SystemId,EmployeeID)对)。无论哪种方式,上述概念仍然允许您将多个ID映射到单个Employee记录,而不使用OR,从而从INDEX中获得最大利益。
答案 2 :(得分:0)
在伪sql中:
update project_table set
employeeid = (select newid from newemp where old_id = employeeid)
where employeeid in (select old_id from newemp);
现在你只有一个关系来处理。