【问题标题】:How to select data from multiple tables using joins/subquery properly? (PHP-MySQL)如何正确使用连接/子查询从多个表中选择数据? (PHP-MySQL)
【发布时间】:2012-06-25 21:58:23
【问题描述】:

我有如下图所示的三个表。

注意: 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

得到了这个结果:

我使用的查询很长,可能写得不好,我想知道如何使用更好的 sql 查询通过连接或子查询来获得相同的结果。 (我在 projectdetails.ProjectDetailsID 的开头添加了一个 DISTINCT,因为没有它,有些行会重复)。我正在寻找比我目前使用的更好的查询。

【问题讨论】:

    标签: php mysql join subquery


    【解决方案1】:

    试试这样的(没测试过,可以试试):

    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】:

      试试这个查询我希望它对你有用

      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 
      

      【讨论】:

        猜你喜欢
        • 2023-03-20
        • 2020-04-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-28
        • 1970-01-01
        • 2017-08-18
        相关资源
        最近更新 更多