【发布时间】:2010-12-20 22:09:17
【问题描述】:
我在 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)。我的目标是 LEFT JOIN 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 接受语法并运行查询,但它忽略了明显在结果集中的结果。想知道日期格式是否以某种方式丢失,我在 begin_date 和 end_date 周围放置了一个 FORMAT,以强制将它们解释为短日期。奇怪的是,这产生了一个不同的结果集,但它仍然遗漏了它不应该有的结果。
我想知道查询是否以您无法左连接 UNION ALL 的结果集的方式执行。有人对此有任何想法/想法吗?有没有更好的方法来实现最终目标?
【问题讨论】: