MS Access에서 전체 외부 조인을 시뮬레이트하고 다음과 같은 결과를 결합한 쿼리를 만들었습니다.MS Access SQL : UNION ALL과 LEFT 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 qEstimatesAnduals를 다른 테이블로 조인하는 것입니다. 다음과 같은 :
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 결과 집합 LEFT JOIN 수없는 방식으로 쿼리를 수행하는 경우 궁금합니다. 누구든지 이것에 대한 생각이나 아이디어가 있습니까? 최종 목표를 달성 할 수있는 더 좋은 방법이 있습니까?
나는 또한 Nz()로 리턴 타입을 신뢰할 수 없다는 것에 좌절감을 나타냈다.하지만 정의에 따르면, 언젠가 적어도 언젠가는 널 (null)이 될 것으로 기대하고있다. 반환 형식 또는 소스 데이터에 대한 메타 데이터를 검사하십시오. 그래서, 당신 스스로 그것을해야합니다. 즉, 인덱스를 사용할 수 없기 때문에 Nz() 표현식에 조인하면 문제가되는 것입니다. –
이 기사는 합리적인 UNION ALL에 기반한 것입니다. 당신은 오직 하나만 가지고 있습니다. 어떻게 모든 결과를 얻을 수 있습니까? – IamIC
@ David-W-Fenton 당연히 말이됩니다. 디자인에 관해서는 다른 제안이 있습니까? 약간의 단순화와 함께, (1) employee_id, week_end_date, 및 projected_hours가있는 견적 테이블과 (2) employee_id, week_end_date 및 actual_hours가있는 실제 테이블. 예상대로 일하는 직원이있을 수 있지만 그렇지 않은 직원이있을 수 있습니다. 마찬가지로, 일할 것으로 예상되지 않았지만 그렇게 할 직원이있을 수 있습니다. 목표 : employee_id, week_end_date, projected_hours, actual_hours를 쿼리 가능한 단일 객체로 가져옵니다. 예 : 001, 9/26/2010, 0, 10 – Adam