2015-04-04 10 views
1

我有两个相关表:与3列合同:ContractsID,AreaManager和AreaLeader。然后我有雇员表2列:EmployeesID,EmployeeName。 EmployeeID是AreaManager和AreaLeader的外键。我试图创建一个SELECT查询来回显ContractID,区域经理的名称和区域负责人的名字。如何从相关表的同一字段回显值

这就是我的;

$query = "SELECT Contracts.ContractsID, Contracts.AreaLeader, Contracts.AreaManager, Employees.EmployeeName FROM Contracts 
INNER JOIN Employees ON Employees.EmployeeID = Contracts.AreaManager 
INNER JOIN Employees ON Employees.EmployeeID = Contracts.AreaLeader 

但是,查询不起作用。我相信我应该使用表别名,但我有点为此苦苦挣扎。

我试过,但没有奏效:

$query = "SELECT c.ContractsID, m.Employees.EmployeeName as ManagerName, l.Employees.EmployeeName as LeaderName 

FROM c.Contracts 

JOIN Employees m ON m.EmployeeID = c.AreaManager 

JOIN Employees l ON l.EmployeeID = c.AreaLeader 

任何帮助将不胜感激!

+0

提供一些示例数据和预期结果。 – 2015-04-04 20:26:12

+0

您的第二个查询对我来说看起来很好,除了'm.Employees.EmployeeName'和'l.Employees.EmployeeName',它们应该分别是'm.EmployeeName'和'l.EmployeeName'。 – denat 2015-04-04 20:31:00

+0

你是否直接在mysql上运行你的查询?它是否返回结果?你是如何确定查询不起作用的? – 2015-04-04 21:10:21

回答

1

为什么你的原始查询不起作用的原因是因为你Employees加入两次,你需要别名他们做出区分。

$query = "SELECT Contracts.ContractsID, Contracts.AreaLeader, Contracts.AreaManager, Employees.EmployeeName FROM Contracts 
INNER JOIN Employees Employee1 ON Employee1.EmployeeID = Contracts.AreaManager 
INNER JOIN Employees Employee2 ON Employee2.EmployeeID = Contracts.AreaLeader 

除非您想这样做,否则不需要别名Contracts

您的第二个查询失败,因为您没有正确别名Contracts。您应该输入Contracts c而不是c.Contracts

1

对第二个查询有正确的处理方法,但在其中有语法错误。您的查询会是这个样子:

$query = "SELECT c.ContractsID, m.EmployeeName as ManagerName, l.EmployeeName as LeaderName 
FROM Contracts c 
JOIN Employees m ON m.EmployeeID = c.AreaManager 
JOIN Employees l ON l.EmployeeID = c.AreaLeader" 
相关问题