Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Access 2013-一对多关系:在“一”侧显示所有值,仅在“多”侧选择值_Sql_Ms Access_Vba_Ms Access 2013 - Fatal编程技术网

Sql Access 2013-一对多关系:在“一”侧显示所有值,仅在“多”侧选择值

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中可能还没有该年度的薪资级别值 我有一个连续的表单

我有两个表——tblSalaryBand和tblSalaryBandYear,由tblSalaryBand.ID=tblSalaryBandYear.SalaryBandID链接。在tblSalaryBandYear中,我有BandMax和BandMin的值,然后是ReviewYearID。因此,对于每个工资级别,我每年可以有一个最大值和一个最小值

我想做的是列出所选年度的所有工资级别和最高和最低工资级别。但是,tblSalaryBandYear中可能还没有该年度的薪资级别值

我有一个连续的表单设置,我可以使用左连接显示所有薪资级别,即使它们在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