第三次加入以获取帐号的first_Name和Last_Name

时间:2011-11-11 16:05:37

标签: mysql

我有以下查询,它与Accounts表上的Account_ID匹配,并在项目分配表上显示AccountID,并显示分配给项目的帐户:

SELECT proj.ProjectID, A.Project_Title, B.Account_ID, B.Username, B.Access_Type
FROM Project_Assigned proj
INNER JOIN Account B
    ON proj.AccountID = B.Account_ID
INNER JOIN Project A
    ON proj.ProjectID = A.Project_ID
WHERE proj.ProjectID = 1;

我现在要做的是从Client表和Agency_Employee表中获取First_Name,Last_Name,并显示与Account_ID匹配的信息。 Client_IDEmployee_ID都是Account_ID的外键。如何将此信息添加到上面的连接中?

我试图添加一个额外的连接,但我总是得到一个结果集匹配0,我知道不应该这样。

客户表:

+-----------+------------+-----------+
| Client_ID | First_Name | Last_Name |
+-----------+------------+-----------+
|         4 | Phil       | Jones     |
+-----------+------------+-----------+

员工表:

+-------------+------------+-----------+
| Employee_ID | First_Name | Last_Name |
+-------------+------------+-----------+
|           2 | John       | Smith     |
|           5 | Bob        | Jones     |
|           6 | Fred       | Tucker    |
+-------------+------------+-----------+

帐户表:

+------------+----------+
| Account_ID | Username |
+------------+----------+
|          1 | Dan      |
|          2 | rjm      |
|          3 | pw       |
|          4 | Philly   |
|          5 | bob      |
|          6 | fred     |
+------------+----------+

项目分配表:

+-----------+-----------+
| ProjectID | AccountID |
+-----------+-----------+
|         1 |         1 |
|         1 |         2 |
|         1 |         4 |
+-----------+-----------+

2 个答案:

答案 0 :(得分:2)

我不确定,但您似乎表明,对于ID为5的帐户,客户端的ID为5,员工的ID为5?有点奇怪,你可能想读一下标准化,但这不应该有效吗?

SELECT 
    proj.ProjectID, 
    Project.Project_Title, 
    Account.Account_ID, Account.Username,
    Client.First_Name AS Client_First_Name, Client.Last_Name AS Client_Last_Name,
    Employee.First_Name AS Employee_First_Name, Employee.Last_Name AS Employee_Last_Name

FROM `Project_Assigned` proj
INNER JOIN `Account` ON (proj.AccountID = Account.Account_ID)
INNER JOIN `Project` ON (proj.ProjectID = Project.Project_ID)
LEFT JOIN `Client` ON (Account.Account_ID = Client.Client_ID)
LEFT JOIN `Employee` ON (Account.Account_ID = Employee.Employee_ID)
WHERE proj.ProjectID = 1;

修改 好的,我已经更新了我的答案。 你将有两个名字和两个姓氏,其中一个总是为空。

如果您只想要一个联系人姓名,请尝试以下方法:

SELECT 
    COALESCE(Client.First_Name, Employee.First_Name) FirstName,
    COALESCE(Client.Last_Name, Employee.Last_Name) LastName

答案 1 :(得分:0)

SELECT c.First_Name, c.Last_Name, e.First_Name, e.Last_Name 
FROM client c, employee e, account a 
WHERE c.Client_ID = a.Account_ID OR e.Employee_ID = a.Account_ID

OR

SELECT c.First_Name, c.Last_Name
FROM client c, account a 
WHERE c.Client_ID = a.Account_ID    
UNION    
SELECT e.First_Name, e.Last_Name 
FROM employee e, account a 
WHERE e.Employee_ID = a.Account_ID