【发布时间】:2020-01-31 08:33:17
【问题描述】:
我在 Access 数据库中有两个表。一张是考勤桌,另一张是学生桌。出勤表包含日期和学生证。 ID 是学生表中的主键,出席日期是出勤表中的 pk。我想要的是一个返回日期和学生姓名的查询,以便我可以将它们显示给用户。复杂之处在于,出勤表每个日期最多包含 75 个学生 ID,所以如果我进行标准内部联接,它必须包含 75 个“OR”子句,这非常麻烦,而且 Access 无论如何都只允许 20 个内部联接. 有没有办法我可以做这样的事情:
SELECT a.attendanceDate FROM (Attendance as a WHERE a.[attendanceDate] BETWEEN #01/01/2020# AND #01/31/2020# INNER JOIN Students AS s ON s.[studentID] = a.[ANY_COLUMN]);
在此示例中,它应返回 2020 年 1 月的出勤记录,如下所示:
2020 年 1 月 2 日“迈克·约翰逊”
2020 年 1 月 10 日“迈克·约翰逊”、“玛丽·史密斯”
2020 年 1 月 25 日“玛丽·史密斯”、“查德·琼斯”、“凯里·欧文”
【问题讨论】:
-
出席有 75 列的学生 ID?那将是糟糕的数据模型。
-
我同意 ComputerVersteher 的观点,即您的问题是不合适的数据模型。你应该改变它。否则,您的许多查询将不得不“繁琐”(而且速度很慢)。
-
关于你的结果:
'Mary Smith', 'Chad Jones', 'Kyrie Erving'应该是一个字符串吗?据我所知,MS-Access 没有字符串聚合功能,因此您必须在您的应用程序(VBA 脚本?)中执行此操作,并且只选择原子数据(01/25/2020 'Mary Smith'、01/25/2020 'Chad Jones'、01/25/2020 'Kyrie Erving')。 -
返回值应该是记录集或表格的形式