Соединить запрос из таблицы с несколькими внешними ключами к одному первичному ключу таблицы - PullRequest
1 голос
/ 13 сентября 2009

У меня есть система рабочих заказов, использующая SQL Express 2008. У меня есть таблица под названием Workorders, в которой есть несколько сотрудников, связанных с ней через идентификатор пользователя. В таблице Workorder у меня есть TechID для Техника, CustomerID для Клиента, QAID для гарантии качества. Они связаны с пользовательской таблицей через идентификатор пользователя (пользовательская таблица PK). Я хочу объединить таблицы, чтобы вернуть Имя техника, Имя клиента и Имя QA из Таблицы пользователей и другую информацию о задании из Таблицы заказов. Я понятия не имею, как построить соединение.

Ответы [ 2 ]

2 голосов
/ 13 сентября 2009

Что-то вроде этого:

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, вы можете использовать левое соединение вместо внутреннего соединения.

0 голосов
/ 13 сентября 2009
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...