Hoe selecteer ik gegevens uit meerdere tabellen met behulp van joins/subquery juist? (PHP-MySQL)

Ik heb drie tabellen zoals weergegeven in de onderstaande afbeelding.

Note: Lead column of projectheader table stores an employee id.

enter image description here

Wat ik wil hebben is in staat zijn om iets op te halen zoals dat in tabel mijn doel (Lead, geeft de lead-naam van die medewerker weer)

Ik was in staat om dat te doen met behulp van de onderstaande vraag.

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

And got this result: enter image description here

De vraag die ik gebruikte is vrij lang en misschien niet goed geschreven, ik wil een andere manier weten over hoe ik hetzelfde resultaat kon bereiken met een betere SQL-query, hetzij door join of een subquery te gebruiken. (Ik voegde een ONDERSCHEID toe aan het begin van projectdetails.ProjectDetailsID omdat zonder dat sommige rijen gedupliceerd worden). Ik ben op zoek naar een betere zoekopdracht dan degene die ik momenteel gebruik.

7
Niet spreken, alleen handelen.
toegevoegd de auteur The Nail, de bron

2 antwoord

Probeer deze query, ik hoop dat het voor u werkt

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 
2
toegevoegd

Probeer iets als dit (test het niet, probeer het eens):

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
2
toegevoegd