简体   繁体   English

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

[英]Access 2013 - One to Many relationship: Show all values on “One” side and only select values on “Many” side

I've got two tables - tblSalaryBand and tblSalaryBandYear linked by tblSalaryBand.ID = tblSalaryBandYear.SalaryBandID . 我有两个表tblSalaryBandtblSalaryBandYear通过tblSalaryBand.ID = tblSalaryBandYear.SalaryBandID链接。 Within tblSalaryBandYear I have values for BandMax and BandMin, and then a ReviewYearID. tblSalaryBandYear我具有BandMax和BandMin的值,然后是ReviewYearID。 So for each Salary Band I can have a Max and a Min for each year. 因此,对于每个薪水等级,我每年可以有一个最大值和一个最小值。

What I would like to do is have a list of all Salary Bands and the Max and Min for the selected year. 我想做的是列出所有薪资等级以及所选年份的最高和最低清单。 However there may not yet be a values for the Salary Band for that year in the tblSalaryBandYear . 但是, tblSalaryBandYear该年的薪水范围可能还没有值。

I've got a continuous form setup which I can get to show all Salary Bands even if they don't have a value in tblSalaryBandYear using an left join: 我有一个连续的表单设置,即使使用左连接在tblSalaryBandYear没有值,我也可以显示所有薪水范围:

SELECT tblSalaryBand.BandName, tblSalaryBandYear.BandMax, tblSalaryBandYear.BandMin, tblSalaryBand.ID AS SalaryBandID
FROM tblSalaryBand LEFT JOIN tblSalaryBandYear ON tblSalaryBand.ID = tblSalaryBandYear.SalaryBandID;

But when I try to filter them down by ReviewYearID they don't show at all if no value exists in tblSalaryBandYear . 但是,当我尝试按ReviewYearID过滤掉它们时,如果tblSalaryBandYear不存在任何值,它们根本不会显示。

SELECT tblSalaryBand.BandName, tblSalaryBandYear.BandMax, tblSalaryBandYear.BandMin, tblSalaryBand.ID AS SalaryBandID
FROM tblSalaryBand LEFT JOIN tblSalaryBandYear ON tblSalaryBand.ID = tblSalaryBandYear.SalaryBandID
WHERE (((tblSalaryBandYear.ReviewYearID)=[Forms]![frmHome]![SelectedYear]));

Is there a way to have all Salary Bands show and then only show values for BandMin and Max from the selected review year? 有没有一种方法可以显示所有薪级,然后仅显示所选检查年度的BandMin和Max值?

The issue is that the where clause effectively eliminates the rows without any matching ReviewYearID (and makes the join behave like an inner join instead of a left outer join). 问题是where子句有效地消除了没有任何匹配的ReviewYearID的行(并使联接的行为类似于内部联接而不是左侧外部联接)。

Try this instead: 尝试以下方法:

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 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM