Я создал запрос в MS Access, чтобы смоделировать FULL OUTER JOIN и объединить результаты, которые выглядят примерно так:
SELECT NZ(estimates.employee_id, actuals.employee_id) AS employee_id
, NZ(estimates.a_date, actuals.a_date) AS a_date
, estimates.estimated_hours
, actuals.actual_hours
FROM (SELECT *
FROM estimates
LEFT JOIN actuals ON estimates.employee_id = actuals.employee_id
AND estimates.a_date = actuals.a_date
UNION ALL
SELECT *
FROM estimates
RIGHT JOIN actuals ON estimates.employee_id = actuals.employee_id
AND estimates.a_date = actuals.a_date
WHERE estimates.employee_id IS NULL
OR estimates.a_date IS NULL) AS qFullJoinEstimatesActuals
Я сохранил этот запрос как объект (назовем его qEstimatesAndActuals
). Моя цель - ПОДКЛЮЧИТЬ qEstimatesAndActuals к другой таблице. Примерно так:
SELECT *
FROM qJoinedTable
LEFT JOIN (SELECT *
FROM labor_rates) AS rates
ON qJoinedTable.employee_id = rates.employee_id
AND qJoinedTable.a_date BETWEEN rates.begin_date AND rates.end_date
MS Access принимает синтаксис и выполняет запрос, но пропускает результаты, которые явно находятся в наборе результатов. Удивляясь, что формат даты был каким-то образом потерян, я поместил FORMAT вокруг begin_date и end_date, чтобы заставить их интерпретироваться как Short Dates. Как ни странно, это привело к другому набору результатов, но все равно пропустил результат, которого не должно было быть.
Мне интересно, если запросы выполняются таким образом, что вы не можете присоединиться к результирующему набору UNION ALL. У кого-нибудь есть мысли / идеи по этому поводу? Есть ли лучший способ достижения конечной цели?