2016-11-07 2 views
0

У меня есть две таблицы:Соедините таблицу в SQL на основе двух столбцов?

Employees (columns: ID, Name) 

и

employee partners (EmployeeID1, EmployeeID2, Time) 

хочу выводить EmployeName1, EmployeeName2, времени вместо imployee идентификаторами.

(Другими словами, заменить идентификаторы с именами, но в двух колонках, в то время)

Как мне это сделать? Будет ли 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 правильно для читабельности ... но не является детальным. – 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.
  • Использование псевдонимов таблиц; они облегчают запись и чтение запроса.
  • Отметьте имена всех колонок; то есть включить имя таблицы, чтобы вы знали, откуда находится столбец.
  • Я также добавил псевдонимы столбцов, чтобы вы могли различать имена.
Смежные вопросы