2016-11-07 61 views
0

我有两个表:基于两列在SQL中加入表?

Employees (columns: ID, Name) 

employee partners (EmployeeID1, EmployeeID2, Time) 

我要输出EmployeName1,EmployeeName2,时间,而不是imployee IDS。

(换句话说,替换名称的ID,但在两列在同一时间)

我会怎么做呢? JOIN会是合适的命令吗?

+0

是的。 'JOIN'是正确的命令。仔细阅读它并尝试查询。如果您无法使用它,请发布您尝试在您的问题中使用的查询,我们可以从那里获得帮助 – Galz

回答

1

您需要连接员工表2次,因为员工合作伙伴表充当多对多连接。 的选择应该是:

SELECT emp1.name, emp2.name, em.time 
FROM Employees emp1 
JOIN employee_partners em ON emp1.id = EmployeeID1 
JOIN Employees emp2 on emp2.id = EmployeeID2 
+1

如果您使用employee_partners作为主要故事,并且两个员工作为加入者,则会更好。(对我而言) – scaisEdge

+0

同意从可读性的角度来看。由于它是一个常规的连接,所以对逻辑没有影响。 – asafm

+0

@asfam正确readabilty ...但不是一个细节.. – scaisEdge

1
在这些情况下

通常情况下,你要使用LEFT JOIN

SELECT e1.name as name1, e2.name as name2, em.time 
FROM employee_partners ep LEFT JOIN 
    Employees e1 
    ON e1.id = ep.EmployeeID1 LEFT JOIN 
    Employees e2 
    ON e2.id = ep.EmployeeID2; 

注:

  • LEFT JOIN■确保你没有,如果失去行员工专栏中的任何一个都是NULL
  • 使用表别名;他们使查询更易于编写和阅读。
  • 限定所有列名;即包含表名,以便知道列的来源。
  • 我还添加了列别名,以便您可以区分名称。