简体   繁体   中英

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 . Within tblSalaryBandYear I have values for BandMax and BandMin, and then a 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 .

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:

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 .

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?

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).

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 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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