下の画像に示すように、3つのテーブルがあります。
注:projectheaderテーブルの先頭の列には従業員IDが格納されます。
私が欲しいのは、私の目標の表にあるようなものを取得できることです(リード、その従業員のリード名を表示します)
以下のクエリを使用してそれを行うことができました。
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
そして、この結果を得ました:
私が使用したクエリは非常に長く、おそらくうまく記述されていません。joinまたはサブクエリを使用してより良いSQLクエリを使用して同じ結果を達成する方法について別の方法を知りたいです。 (いくつかの行が重複しているため、projectdetails.ProjectDetailsIDの先頭にDISTINCTを追加しました)。現在使用しているクエリよりも優れたクエリを探しています。
このようなものを試してください(まだテストしていません。試してみてください):
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