SELECT WHERE Between SELECT 来自另一个 table 的日期
SELECT WHERE Between SELECT Dates from another table
我想知道是否可以做到这一点 simpler/shorter。它正在运行,但我认为我可以更快、更高效或更清洁。
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));
这是我的测试 Select 实际上将更改为删除。简而言之,我从 Tbl_VShedTime 中选择与 INNER JOIN 上的 EID 匹配的任何内容以及 CalendarScheduled 中的最小日期和最大日期之间的任何内容。但是我被迫在每个日期下使用 SELECT 才能正常工作。当我已经 "conjured" FROM 语句中的 table 时,它不会仅仅通过使用 MIN 和 MAX 来工作。
这是我必须在访问中使用它的方式还是我错过了什么?谢谢。
编辑:问题是:为什么我不能只写:
WHERE ([Tbl_VSchedTime].[SchdDate] Between MIN(CalendarScheduled.[SchdDate]) And MAX(CalendarScheduled.[SchdDate]))
考虑加入聚合查询,然后在WHERE
条件下使用聚合。因为聚合 return 一行,所以将它们与您当前的查询交叉连接,这在 MS Access 中意味着 FROM
:
中的逗号分隔
内连接之前的交叉连接
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;
内连接后的交叉连接
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;
我想知道是否可以做到这一点 simpler/shorter。它正在运行,但我认为我可以更快、更高效或更清洁。
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));
这是我的测试 Select 实际上将更改为删除。简而言之,我从 Tbl_VShedTime 中选择与 INNER JOIN 上的 EID 匹配的任何内容以及 CalendarScheduled 中的最小日期和最大日期之间的任何内容。但是我被迫在每个日期下使用 SELECT 才能正常工作。当我已经 "conjured" FROM 语句中的 table 时,它不会仅仅通过使用 MIN 和 MAX 来工作。
这是我必须在访问中使用它的方式还是我错过了什么?谢谢。
编辑:问题是:为什么我不能只写:
WHERE ([Tbl_VSchedTime].[SchdDate] Between MIN(CalendarScheduled.[SchdDate]) And MAX(CalendarScheduled.[SchdDate]))
考虑加入聚合查询,然后在WHERE
条件下使用聚合。因为聚合 return 一行,所以将它们与您当前的查询交叉连接,这在 MS Access 中意味着 FROM
:
内连接之前的交叉连接
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;
内连接后的交叉连接
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;