sql连接到不同的列

时间:2011-09-06 12:02:49

标签: sql tsql

我有一个表,其中包含项目经理和项目主管员工ID,例如

projectmanagerId
projectdirectorId

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

JEmployeeId
MEmployeeId

我想过创建一个像这样的联结表

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

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

和导演类似。这是最好的方法吗?有没有更好的办法。为此创建4个表似乎有点过分了。

3 个答案:

答案 0 :(得分:0)

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

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)

  • 将所有员工数据存入新表格
  • 复制新表格中没有的所有内容
  • 复制旧员工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);

现在你只有一个关系来处理。