2013-07-10 2 views
1

qryAvailability1은 예약을 위해 블록 된 두 개의 쿼리를 가지고 있으며 qryAvailability2은 예약이 이루어지기 전에 완전히 사용 가능한 날짜를 생성합니다.일치하는 쿼리없이 SQL로 쿼리를 대체하는 SQL 식

qryAvailability1 :

SELECT tblReservations.PropertyID, tblDates.Date 
FROM tblReservations, tblDates 
WHERE (((tblDates.Date) Between [tblReservations]![CheckIn] And [tblReservations]![CheckOut])); 

qryAvailability2 :

SELECT tblProperties.PropertyID, tblDates.Date

내가 예약 가능한 날짜를 정의하는 쿼리를 "일치하지 않고"마지막에 그들을 결합 FROM tblProperties, tblDates;

마지막 "일치하지 않고"쿼리

SELECT qryAvailability2.PropertyID, qryAvailability2.Date 
FROM qryAvailability2 LEFT JOIN qryAvailability1 ON (qryAvailability2.Date=qryAvailability1.Date) AND (qryAvailability2.PropertyID=qryAvailability1.PropertyID) 
WHERE (((qryAvailability1.Date) Is Null)) 
ORDER BY qryAvailability2.PropertyID, qryAvailability2.Date; 

1 개 쿼리 대신 세 가지로 하나의 쿼리 문을 어떤 방법이 있나요?

즉, qryAvailability1qryAvailability2에 대한 참조를 생성하는 SQL 문과 바꿔야합니다 (시도한 항목이 전혀 작동하지 않음).

답변

1

다음 세 가지가 결합, (내가 그것을 확인하지 않은) 최종 쿼리 작품을 가정 :

SELECT qryAvailability2.PropertyID, qryAvailability2.Date 
FROM (
SELECT tblProperties.PropertyID, tblDates.Date FROM tblProperties, tblDates 
) qryAvailability2 LEFT JOIN (
SELECT tblReservations.PropertyID, tblDates.Date 
FROM tblReservations, tblDates 
WHERE (((tblDates.Date) Between [tblReservations]![CheckIn] And [tblReservations]![CheckOut])) 
) qryAvailability1 ON (qryAvailability2.Date=qryAvailability1.Date) AND (qryAvailability2.PropertyID=qryAvailability1.PropertyID) 
WHERE (((qryAvailability1.Date) Is Null)) 
ORDER BY qryAvailability2.PropertyID, qryAvailability2.Date; 
+0

그것은 잘 작동합니다. 고마워요! – Michael