ВЫБЕРИТЕ ГДЕ Между ВЫБРАТЬ Даты из другой таблицы - PullRequest
0 голосов
/ 02 апреля 2020

Я пытаюсь выяснить, можно ли сделать это проще / короче. Это работает, но я думаю, что могу быть быстрее, эффективнее или чище.

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));

Это мой тестовый выбор, который фактически изменится на Удалить. Короче говоря, я выбираю из Tbl_VShedTime все, что соответствует EID в INNER JOIN и между минимальной и максимальной датами в CalendarScheduled. Однако я вынужден использовать SELECT под каждой из дат для его работы. Это не будет просто работать с использованием MIN и MAX, когда я уже «заклинаю» таблицу в операторе FROM.

Это то, как я должен использовать его в доступе, или я что-то пропустил? Спасибо.

Редактировать: Вопрос в том, почему я не могу просто написать:

WHERE ([Tbl_VSchedTime].[SchdDate] Between MIN(CalendarScheduled.[SchdDate]) And MAX(CalendarScheduled.[SchdDate]))

1 Ответ

1 голос
/ 02 апреля 2020

Рассмотрите возможность присоединения к агрегированному запросу, а затем используйте агрегаты в условии WHERE. Поскольку агрегаты возвращают одну строку, перекрестное соединение их с текущим запросом, которое в MS Access означает разделение запятыми в FROM:

CROSS JOIN, прежде чем 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 После ВНУТРЕННЕГО СОЕДИНЕНИЯ

...