基于另一个字段获取表的行源的正确SQL语句是什么?

时间:2014-06-03 18:56:08

标签: sql ms-access

我目前按以下方式设置架构:

enter image description here

表tblCategoryRiskArea被设置为类别和RiskAreas之间可以存在的多对多关系的中间表。

在tblBase表中,我想这样做,以便RiskArea选择取决于Category选项。 MS Access允许您基于行源SQL语句为表中的字段设置查找。我无法找出正确的SQL语句来定义依赖于Category的RiskArea的Row Source。这样:

    SELECT tblRiskAreas.RiskAreaID, tblRiskAreas.RiskArea
    FROM tblRiskAreas INNER JOIN 
    ((tblCategories INNER JOIN tblBase 
        ON tblCategories.CategoryId = tblBase.Category) 
           INNER JOIN tblCategoryRiskArea  
           ON tblCategories.CategoryId = tblCategoryRiskArea.Category)
           ON (tblRiskAreas.RiskAreaID = tblCategoryRiskArea.RiskArea) 
           AND (tblRiskAreas.RiskAreaID = tblBase.RiskArea)
    WHERE (((tblCategoryRiskArea.Category)=[tblBase]![Category]))
    ORDER BY tblRiskAreas.RiskAreaID;

是迄今为止我提出的最好的,使用MS Access'查询生成器,因此所有内部联接都是通过我已经定义了表之间的关系并将它们拖入查询生成器来创建的。但是,此查询不返回任何内容。

我怀疑它可能与我建立的关系的循环性质有关?

谢谢。

已编辑:tblRiskArea包含4个RiskAreas,如下所示:

Environmental
Health
Safety
Security

每个类别可以属于这些RiskAreas中的一个或两个,因此tblCategoryRiskArea会创建它们之间的关系。

1 个答案:

答案 0 :(得分:0)

首先从tblBase中删除Category和RiskArea并将其替换为CategoriRiskAreaID

您将在表单中显示2个组合。第一个组合Catagory数据源:

Select CategoryId,Category from tblCategories 

第二个组合风险区数据来源:

Select a.CategoryRiskId, b.RiskArea 
from tblCategoryRiskArea a
inner join tblRiskArea b
where a.RiskAreaId=b.RiskAreaId
AND a.category = @ComboBoxCategorySelectedItem

现在你有值插入tblBase,ComboBoxSelectedItem是tblCategoryRiskArea.CategoryRiskId