2015-10-22 30 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) 
相關問題