将具有多个外键的表中的查询连接到同一个表主键

时间:2009-09-13 11:39:02

标签: sql join

我有一个使用SQL Express 2008的工作订单系统。我有一个名为Workorders的表,其中有几个人员通过UserID链接到它。在Workorder表中,我有技术人员的TechID,客户的CustomerID,质量保证的QAID。它们通过UserID(用户表PK)链接回用户表。我想加入表格以从用户表中返回技术员姓名,客户名称和QA名称以及工作订单表中的其他工作信息信息。我不知道如何构建连接。

2 个答案:

答案 0 :(得分:2)

有点像这样的东西:

select tech.name as tech_name,
    customer.name as customer_name,
    qa.name as qa_name
from Workorders
    inner join User as tech on tech.userId = Workorders.techId
    inner join User as customer on customer.useId = Workorders.CustomerId
    inner join User as qa on qa.useId = Workorders.QAID

(可能需要一些调整,但想法应该在这里)

即,你是:

  • 从工作订单开始
  • 内部加入其技术人员(用户),
  • 然后在其客户(另一个用户)上进行内部加入

这允许您使用select子句中的正确别名来获取每个名称。
请注意,我在select子句中也使用了别名 - 这对于拥有“worker_name”和“tech_name”非常有用,而不仅仅是两列名称“name” - 特别是如果你从某些人那里调用这个查询其他编程语言。

注意:如果其中一个userId字段可以为NULL,则可能需要使用左连接而不是内连接。

答案 1 :(得分:0)

select tus.Name as 'TechnicianName',
       cus.Name as 'CustomerName',
       qus.Name as 'QaName',
       wod.*
  from WorkOrders wod
         left outer join
       Users      tus on tus.UserId = wod.TechId
         left outer join
       Users      cus on cus.UserId = wod.CustomerId
         left outer join
       Users      qus on qus.UserId = wod.QaId