如何在MS Access中编写多条件SQL查询?求修正给定SQL语法
嘿,我来帮你搞定这两个MS Access SQL的问题!
1. 如何在MS Access中创建带有多个条件的SQL查询
在Access里创建多条件查询有两种实用方式,可视化操作和直接写代码都能搞定:
方法一:通过设计视图可视化创建
- 打开Access,切换到创建选项卡,点击查询设计
- 选择需要用到的表,添加到查询设计窗口
- 在字段行勾选要显示的字段,然后在条件行设置规则:
- 若要多个条件同时满足(逻辑AND),直接在不同字段的条件行输入对应条件,或者在同一字段条件行写
条件1 AND 条件2 - 若要满足任一条件即可(逻辑OR),在同一字段的或行输入第二个条件,或者用
条件1 OR 条件2
- 若要多个条件同时满足(逻辑AND),直接在不同字段的条件行输入对应条件,或者在同一字段条件行写
- 点击运行按钮(!)就能看到结果
方法二:直接编写SQL语句
在SQL视图中,通过WHERE子句组合多个条件,记得用括号明确逻辑优先级,避免歧义:
SELECT 字段1, 字段2 FROM 目标表 WHERE (条件1 OR 条件2) AND 条件3;
举个实际场景的例子:查询2018年借过书且地址包含“北京”的读者信息
SELECT ReaderID, Surname, Name FROM Readers INNER JOIN Loans ON Readers.ReaderID = Loans.ReaderID WHERE YEAR(Loans.DateFrom) = 2018 AND Readers.Address LIKE "*北京*";
2. 修正你的SQL语法错误
先拆解你给出的SQL存在的几个问题,再直接给你修正后的完整版本:
问题点说明:
- 字段
E-mail包含特殊字符(连字符),Access要求必须用方括号[E-mail]包裹,否则会被判定为语法错误 - 内层的统计子查询没有添加别名,Access强制要求所有子查询必须有别名
INNER JOIN的ON条件没写完,需要关联Readers.ReaderID和子查询的ReaderID字段COUNT (readerID)里的空格可以去掉(虽然Access可能兼容,但更符合SQL规范)- 子查询中引用日期字段时,要保持表别名
W的一致性,避免混淆
修正后的完整SQL:
SELECT Surname, Name, Phone, Address, [E-mail] FROM Readers INNER JOIN ( SELECT TOP 1 * FROM ( SELECT ReaderID, COUNT(readerID) AS NB_Readers FROM Loans AS W WHERE YEAR(W.DateFrom) = 2018 AND YEAR(W.DateTo) = 2018 GROUP BY ReaderID ) AS ReaderCounts -- 给内层统计子查询添加别名 ORDER BY NB_Readers DESC ) AS TopReader ON Readers.ReaderID = TopReader.ReaderID; -- 补全JOIN的关联条件
这段SQL会先统计2018年全年有借书记录的读者的借书次数,找出次数最多的那位,最后关联Readers表获取该读者的全部信息。
内容的提问来源于stack exchange,提问作者Iosif
相关产品推荐
相关产品推荐

