2015-12-10 17 views
0

我有一个返回,我在一个场景表中的所有场景查询访问SQL筛选出记录

SELECT DISTINCT RiskScenarios.riskScenID, RiskScenarios.riskScenName 
FROM RiskScenarios 

我也有一个查询,返回与上述相同的领域,但这次使用结合表和一个列表框在窗体上只返回场景中的特定风险适用

Select RiskScenarios.riskScenID, RiskScenarios.riskScenName 
FROM RiskScenarios INNER JOIN TopRiskstoScenarios 
ON RiskScenarios.riskScenID = TopRiskstoScenarios.riskScenID 
WHERE TopRiskstoScenarios.topRiskID = [Forms]![ERMForm]![lTopRisks] 

我想这样做是在第一个查询返回的记录,而在第二省略的记录,我正在试图做为

SELECT DISTINCT RiskScenarios.riskScenID, RiskScenarios.riskScenName 
FROM RiskScenarios 
WHERE NOT EXISTS (Select RiskScenarios.riskScenID, RiskScenarios.riskScenName 
FROM RiskScenarios INNER JOIN TopRiskstoScenarios 
ON RiskScenarios.riskScenID = TopRiskstoScenarios.riskScenID 
WHERE TopRiskstoScenarios.topRiskID = [Forms]![ERMForm]![lTopRisks]) 

但是,此查询不返回任何行。我完全难住,任何帮助将不胜感激。

回答

0

试试这个:

SELECT DISTINCT RiskScenarios.riskScenID, RiskScenarios.riskScenName 
FROM RiskScenarios 
LEFT JOIN (Select TopRiskstoScenarios.riskScenID FROM TopRiskstoScenarios 
WHERE TopRiskstoScenarios.topRiskID = [Forms]![ERMForm]![lTopRisks]) AS TopRisk 
ON RiskScenarios.riskScenID = TopRisk.riskScenID 
WHERE TopRisk.riskScenID IS NULL 

LEFT JOIN包括从“左表” RiskScenarios所有行,并只有那些记录匹配从“右表” RiskScenarios.riskScenID(标记为TopRisk子查询) 。

如果没有匹配的TopRisk.riskScenID,则此查询返回NULL。最终的WHERE子句删除非空匹配项,只留下RiskScenarios,而在TopRisk中不匹配。

+0

kismert,这是完美的!也感谢你解释它为什么起作用。这是一个很好的帮助,如果可以的话,我会给你买一瓶啤酒。 – user3276264