2015-12-10 94 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