2012-03-17 73 views
0

好吧我有一个Project_Assigned表,其中包含分配给project_id的account_ids列表。不存在:选择未分配给特定项目的帐户?

下面我试图收集当前未分配给特定项目的所有客户端的列表。

目前下面的查询如果没有客户端与特定项目相关联,但只要我将一个客户端分配给项目,结果集将不返回任何内容,而应返回所有未分配给其他客户端的客户端该项目。

SELECT Account.Account_ID, 
Client.First_Name AS `First_Name`, Client.Last_Name AS `Last_Name`, Client.Profile_Pic, Client.Job_Title, Client.Company_Name 
FROM Client 
LEFT JOIN Account ON (Account.Account_ID = Client.Client_ID) 
LEFT JOIN `Admin_Agency` ON (Client.Agency_ID_FK = Admin_Agency.Agency_ID) 
WHERE Account.Access_Type = 'Client' && NOT EXISTS 

(SELECT Account.Account_ID, Account.Access_Type 
FROM `Project_Assigned` projects 
INNER JOIN `Account` ON (projects.AccountID = Account.Account_ID) 
INNER JOIN `Project` ON (projects.ProjectID = Project.Project_ID) 
LEFT JOIN `Client` ON (Account.Account_ID = Client.Client_ID) 
WHERE projects.ProjectID = 48 && Account.Access_Type = 'Client'); 

表Project_Assigned:

+-----------+-----------+ 
| ProjectID | AccountID | 
+-----------+-----------+ 
|   4 |   3 | 
|   4 |   4 | 
|   4 |   5 | 
|   4 |   6 | 
|  12 |   1 | 
|  12 |  11 | 
|  12 |  12 | 
|  29 |  18 | 
|  31 |  18 | 
|  46 |  18 | 
|  48 |  18 | 
|  48 |  12 | 
+-----------+-----------+ 

回答

0

这很可能是我误解你的模式,或你的需求,但它听起来像是你只是想这样的:

SELECT Client_ID, First_Name, Last_Name, Profile_Pic, Job_Title, Company_Name 
    FROM Client 
WHERE Client_ID IN 
     (SELECT Account_ID 
      FROM Account 
      WHERE Access_Type = 'Client' 
     ) 
    AND Client_ID NOT IN 
     (SELECT Account_ID 
      FROM Project_Assigned 
      WHERE ProjectID = 48 
     ) 
; 

没有?

+0

嗨,我做了一个pwew调整编辑上面,现在它的工作。谢谢,这真的有帮助。 – Malcr001 2012-03-17 17:25:30

+0

@ user971824:不客气! – ruakh 2012-03-17 17:28:34

+0

@ user971824:你的编辑对我来说并不合适。例如,“LEFT JOIN Admin_Agency”的用途是什么?查询中没有其他内容实际上是指“Admin_Agency”表。 – ruakh 2012-03-17 17:30:24