2015-10-22 32 views

回答

2

的一般解决方法是使用NOT EXISTS与反向状态(的<>代替=):

SELECT DISTINCT p.ProjectID 
FROM TblProjects p INNER JOIN TblCustomers ct 
    ON ct.ProjectID = p.ProjectID 
WHERE NOT EXISTS 
    (SELECT 1 
    FROM TblCustomers c 
    WHERE c.ProjectID = p.ProjectID AND (Number % 100) <> 0) 

这是SQLFiddle


或者,具体用于该用途的情况下,可以使用更清洁的查询:

SELECT p.ProjectID 
FROM TblProjects p INNER JOIN TblCustomers ct 
    ON ct.ProjectID = p.ProjectID 
GROUP BY p.ProjectID 
HAVING MAX(ct.Number % 100) = 0 

这里有一个SQLFiddle


P.S.如果你只有需要ProjectID,你根本不需要加入任何东西,只需直接使用TblCustomers即可。

+0

嗨艾米特,它不工作。我需要所有的顾客都会满足这个条件。 – Ilan

+0

我修改了答案(我误解了原创)。那仍然不起作用? – Amit

+0

还没有工作 – Ilan

0

你可以使用内部连接

Select * from tblProjects pro 
inner join tblCustomers cst on pro.projectID = cst.ProjectID 
and cst.Number % 100 = 0 

它会给你你要的

0

可以使用CTE获得可读查询:

;with 

not_all_at_100 as 
(select distinct c.ProjectID 
    FROM TblCustomers c 
    WHERE (c.Number % 100) != 0 
), 

all_project_customers as 
(select ProjectID 
    FROM TblCustomers 
) 

select distinct p.ProjectID 
from TblProjects p 
where p.ProjectID in (select ProjectID from all_project_customers) 
    and p.ProjectID not in (select ProjectID from not_all_at_100) 
相关问题