繁体   English   中英

sql连接到不同的列

[英]sql join to different columns

我有一个表,其中包含项目经理和项目总监雇员的ID,例如

projectmanagerId
projectdirectorId

我需要将这些列中的每一个链接到一个employees表,但是问题是,projectmanagerId列和ProjectDirectorId列都需要链接到两个列中的任何一个,例如

JEmployeeId
MEmployeeId

我考虑过像这样创建一个联结表

ProjectManagerEmployeeJunction1
-------------------------------
projectmanagerId
JEmployeeId

ProjectManagerEmployeeJunction2
-------------------------------
projectmanagerId
MEmployeeId

和导演相似。 这是做到这一点的最佳方法。 有没有更好的办法。 为此创建4个表似乎有点过头了。

我认为您可以将INNER JOINOR子句配合使用,例如:

t1 inner join
t2 on projectmanagerId = JEmployeeID or projectmanagerID = MEmployeeID

我将以类似但略有不同的方式进行处理。

不是为ProjectManager和/或ProjectDirector创建表,而是为所有员工创建表。

EmployeeIDJunction
------------------
externalID,
EmployeeUniqueID

然后,一个雇员将在表中有两个条目。 一条记录,其中externalID是JEployeeID,一条记录,其中externalID是MEmployeeID。 然后,EmployeeUnqiueID将是您想要映射到employee表的任何 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获得最大的收益。

  • 将所有员工数据放入新表
  • 复制新表中没有的所有内容
  • 也复制旧的员工ID
  • 更新您的项目数据记录,以将旧ID替换为新ID:

在伪sql中:

update project_table set
employeeid = (select newid from newemp where old_id = employeeid)
where employeeid in (select old_id from newemp);

现在您只需要处理一种关系。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM