Sql Access 2013-一对多关系:在“一”侧显示所有值,仅在“多”侧选择值
我有两个表——tblSalaryBand和tblSalaryBandYear,由tblSalaryBand.ID=tblSalaryBandYear.SalaryBandID链接。在tblSalaryBandYear中,我有BandMax和BandMin的值,然后是ReviewYearID。因此,对于每个工资级别,我每年可以有一个最大值和一个最小值 我想做的是列出所选年度的所有工资级别和最高和最低工资级别。但是,tblSalaryBandYear中可能还没有该年度的薪资级别值 我有一个连续的表单设置,我可以使用左连接显示所有薪资级别,即使它们在tblSalaryBandYear中没有值:Sql Access 2013-一对多关系:在“一”侧显示所有值,仅在“多”侧选择值,sql,ms-access,vba,ms-access-2013,Sql,Ms Access,Vba,Ms Access 2013,我有两个表——tblSalaryBand和tblSalaryBandYear,由tblSalaryBand.ID=tblSalaryBandYear.SalaryBandID链接。在tblSalaryBandYear中,我有BandMax和BandMin的值,然后是ReviewYearID。因此,对于每个工资级别,我每年可以有一个最大值和一个最小值 我想做的是列出所选年度的所有工资级别和最高和最低工资级别。但是,tblSalaryBandYear中可能还没有该年度的薪资级别值 我有一个连续的表单
SELECT tblSalaryBand.BandName, tblSalaryBandYear.BandMax, tblSalaryBandYear.BandMin, tblSalaryBand.ID AS SalaryBandID
FROM tblSalaryBand LEFT JOIN tblSalaryBandYear ON tblSalaryBand.ID = tblSalaryBandYear.SalaryBandID;
但当我试图通过ReviewYearID筛选它们时,如果tblSalaryBandYear中不存在任何值,它们就根本不会显示
是否有办法显示所有薪资级别,然后仅显示所选审核年度的最低和最高级别的值 问题在于where子句有效地消除了没有任何匹配ReviewYearID的行,并使联接的行为类似于内部联接,而不是左外部联接 请尝试以下方法:
SELECT
tblSalaryBand.BandName, tblSalaryBandYear.BandMax,
tblSalaryBandYear.BandMin, tblSalaryBand.ID AS SalaryBandID
FROM tblSalaryBand
LEFT JOIN (
SELECT *
FROM tblSalaryBandYear
WHERE ReviewYearID = [Forms]![frmHome]![SelectedYear]
) AS SBY ON tblSalaryBand.ID = SBY.SalaryBandID
因此,尝试第一个选项-Access似乎不喜欢使用[表单]![frmHome]!加入中的[SelectedYear]。给我一个错误,说它不受支持。第二个选项是可行的,但我不认为它能在所有情况下提取正确的记录。如果我选择了一个没有任何薪资等级记录的年份,我只会得到显示任何年份都没有价值的等级。它们不是当前年份,但为空。@icuper哦,我不知道Access不支持第一个查询中的构造。我看到了第二个查询的问题-让我想一想,我会做一些搜索,看看是否有一种方法可以让前者在Access中工作,但是如果你有任何其他想法,那就太棒了。@I我已经更新了我的答案-我想现在应该可以了。太棒了,看起来它已经工作了。关于这种联接/子查询在哪里可以阅读以及它是如何工作的,有什么建议吗?我觉得我需要这些信息。
SELECT
tblSalaryBand.BandName, tblSalaryBandYear.BandMax,
tblSalaryBandYear.BandMin, tblSalaryBand.ID AS SalaryBandID
FROM tblSalaryBand
LEFT JOIN (
SELECT *
FROM tblSalaryBandYear
WHERE ReviewYearID = [Forms]![frmHome]![SelectedYear]
) AS SBY ON tblSalaryBand.ID = SBY.SalaryBandID