У меня три таблицы, как показано ниже.
Примечание. В ведущем столбце таблицы проекционного менеджера хранится идентификатор сотрудника.
То, что я хочу иметь, – это получить что-то вроде таблицы в моей цели (Lead, отображает название этого сотрудника)
Я смог сделать это, используя запрос ниже.
SELECT DISTINCT projectdetails.ProjectDetailsID, projectheader.ProjectID, projectheader.ProjectName, projectheader.Lead, projectheader.StartDate, projectheader.EndDate, projectheader.Status, projectheader.Remarks, projectdetails.EmployeeID, employee.Firstname, employee.Lastname, Lead.Leadname FROM projectheader, projectdetails, employee, ( SELECT projectheader.ProjectID AS projid, CONCAT(employee.Firstname,' ',employee.Lastname) AS Leadname FROM employee, projectheader, projectdetails WHERE projectheader.ProjectID = projectdetails.ProjectID AND projectheader.Lead = employee.EmployeeID ) AS Lead WHERE projectheader.ProjectID = projectdetails.ProjectID AND projectdetails.EmployeeID = employee.EmployeeID AND projectheader.ProjectID = Lead.projid AND projectdetails.ProjectID = Lead.projid
И получил этот результат:
Запрос, который я использовал, довольно длинный и, возможно, не очень хорошо написан, я хочу узнать по-другому о том, как я мог бы достичь того же результата, используя лучший SQL-запрос, либо с помощью соединения, либо подзапроса. (Я добавил DISTINCT в начале описания проекта.ProjectDetailsID, потому что без него несколько строк дублируются). Я ищу лучший запрос, чем тот, который я сейчас использую.
Попробуйте что-то вроде этого (не проверял его, вы можете попробовать):
SELECT projectdetails.ProjectDetailsID, projectheader.ProjectID, projectheader.ProjectName, projectheader.Lead, projectheader.StartDate, projectheader.EndDate, projectheader.Status, projectheader.Remarks, projectdetails.EmployeeID, employee.Firstname, employee.Lastname, CONCAT(Lead.Firstname,' ',Lead.Lastname) AS Leadname FROM projectheader, projectdetails, employee, employee as Lead WHERE projectheader.ProjectID = projectdetails.ProjectID AND projectdetails.EmployeeID = employee.EmployeeID AND projectheader.Lead = Lead.EmployeeID
Попробуйте этот запрос, я надеюсь, что его работа для вас
SELECT pd.ProjectDetailsID,ph.*,e.* FROM `projectdetail` pd INNER JOIN projectheader ph ON ph.ProjectID = pd.ProjectID INNER JOIN employee e ON e.EmployeeID = pd.EmployeeID