8

下の画像に示すように、3つのテーブルがあります。

注: projectheader テーブルの Lead 列には、従業員 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

そして、この結果を得ました: ここに画像の説明を入力

私が使用したクエリは非常に長く、おそらく適切に記述されていません。結合またはサブクエリを使用して、より優れた SQL クエリを使用して同じ結果を得る方法について知りたいです。(projectdetails.ProjectDetailsID の先頭に DISTINCT を追加しました。これがないと、一部の行が重複するためです)。現在使用しているクエリよりも優れたクエリを探しています。

4

2 に答える 2

2

次のようなことを試してください (まだテストしていません。試してみてください)。

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
于 2012-06-24T08:16:51.343 に答える
2

このクエリを試してみてください。うまくいくことを願っています

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 
于 2012-06-24T08:40:18.447 に答える