如何正确使用连接/子查询从多个表中选择数据? (PHP-MySQL)
Posted
技术标签:
【中文标题】如何正确使用连接/子查询从多个表中选择数据? (PHP-MySQL)【英文标题】:How to select data from multiple tables using joins/subquery properly? (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,因为没有它,有些行会重复)。我正在寻找比我目前使用的更好的查询。
【问题讨论】:
【参考方案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
【讨论】:
以上是关于如何正确使用连接/子查询从多个表中选择数据? (PHP-MySQL)的主要内容,如果未能解决你的问题,请参考以下文章
如何从SQL表中选择特定行并在SQL Server中连接多个表?