我有两张桌子:
Membership
mID StartingDate Name Address Gender EndingDate
和
Circulation Info
ISBN mID DateOfBorrow DateOfReturn DateOfLoss
我试图找到每个性别的活动水平,但截至目前我没有运气。
这是我到目前为止所尝试的内容:
SELECT Membership.Gender, [Circulation Info].mID, Membership.mID
FROM [Circulation Info] AS c INNER JOIN Membership AS m ON [Circulation Info].mID = Membership.mID
GROUP BY m.mID
HAVING Membership.Gender='F'
当我尝试运行此命令时收到语法错误,它会将我引导到第一行的循环信息。
答案 0 :(得分:2)
原因是您已为表设置了别名,但随后使用表名前缀列名而不是别名。试试这个:
SELECT m.Gender, c.mID, m.mID
FROM [Circulation Info] AS c INNER JOIN Membership AS m ON c.mID = m.mID
GROUP BY m.mID
HAVING m.Gender='F';
答案 1 :(得分:1)
您正在使用表的别名,因此请使用它们。
SELECT m.Gender, c.mID, m.mID
FROM [Circulation Info] AS c INNER JOIN Membership AS m ON c.mID = m.mID
GROUP BY m.mID
HAVING m.Gender='F'
答案 2 :(得分:1)
除了关于表别名的问题(当你为表别名时,你必须使用该别名而不是表名来限定字段名称),我想你想要一个Count()
函数给出你是“活动水平”。
另请注意,Access通常会抱怨SELECT
子句中的任何字段表达式未包含在GROUP BY
中且不是聚合表达式(Min()
,Max()
, Count()
等。)。
我不明白你为什么在c.mID
列表中同时需要m.mID
和SELECT
;它们应该在每一行中相同。另请考虑将标准m.Gender='F'
从HAVING
移至WHERE
条款。
SELECT m.mID, Count(*) AS activity_level
FROM
[Circulation Info] AS c
INNER JOIN Membership AS m
ON c.mID = m.mID
WHERE m.Gender='F'
GROUP BY m.mID;