I'm trying to find out if this can be made simpler/shorter. It is working but i think i can be faster, more efficient or cleaner.
SELECT Tbl_VSchedTime.*
FROM CalendarScheduled
INNER JOIN Tbl_VSchedTime ON CalendarScheduled.[EID] = Tbl_VSchedTime.[EID]
WHERE ([Tbl_VSchedTime].[SchdDate] Between (SELECT MIN(CalendarScheduled.[SchdDate]) FROM CalendarScheduled) And (SELECT MAX(CalendarScheduled.[SchdDate]) FROM CalendarScheduled));
This is my test Select that will actually be change to Delete. In short I am selecting from Tbl_VShedTime anything matching the EIDs on the INNER JOIN and between the min and max dates in CalendarScheduled. However am forced to use a SELECT under each of the dates for it to work. It wont just work by using MIN and MAX when I have already "conjured" the table on the FROM Statement.
Is this just how I have to use it in access or did I miss something? Thanks.
Edit: The question is: Why can't I just write:
WHERE ([Tbl_VSchedTime].[SchdDate] Between MIN(CalendarScheduled.[SchdDate]) And MAX(CalendarScheduled.[SchdDate]))
Consider joining the aggregate query and then use aggregates in WHERE
condition. Because aggregates return one row, cross join them with your current query which in MS Access means comma-separation in FROM
:
CROSS JOIN Before INNER JOIN
SELECT t.*
FROM
(SELECT MIN([SchdDate]) AS MinDate, MAX([SchdDate]) AS MaxDate
FROM CalendarScheduled) AS agg
,
CalendarScheduled c
INNER JOIN Tbl_VSchedTime t ON c.[EID] = t.[EID]
WHERE (t.[SchdDate] BETWEEN agg.MinDate AND agg.MaxDate;
CROSS JOIN After INNER JOIN
SELECT t.*
FROM
(CalendarScheduled c
INNER JOIN Tbl_VSchedTime t ON c.[EID] = t.[EID])
,
(SELECT MIN([SchdDate]) AS MinDate, MAX([SchdDate]) AS MaxDate
FROM CalendarScheduled) AS agg
WHERE (t.[SchdDate] BETWEEN agg.MinDate AND agg.MaxDate;