Access含子查询的多左连接查询报语法错误,求排查修正
Access多左连接查询"Missing Operator"错误修正
Access Jet SQL对多表连接的语法要求比标准SQL更严格,连续多个LEFT JOIN必须通过嵌套括号明确连接层级,否则会抛出"Missing Operator"语法错误。你的原查询中连续两个LEFT JOIN未按此规则嵌套,导致语法不兼容。
修正后的查询代码
SELECT * FROM ( ( SELECT tblTasks.ID, tblTasks.csr_number, tblTasks.title, tblTasks.engineer, tblTasks.poc, tblTasks.customer, tblTasks.complete, tblTasks.status, tblTasks.base_end FROM tblTasks WHERE tblTasks.csr_number IS NOT NULL AND tblTasks.complete < 1 AND tblTasks.status <> 'On hold' ) AS tasks LEFT JOIN ( SELECT * FROM tblNotes AS n1 WHERE n1.note_date = ( SELECT MAX(n2.note_date) FROM tblNotes as n2 WHERE n2.note_id = n1.note_id ) ) AS notes ON tasks.ID = notes.note_id ) LEFT JOIN ( SELECT tblAttach.task_id, tblAttach.attach_name FROM tblAttach WHERE attach_name LIKE '*' ) AS tAttach ON tasks.ID = tAttach.task_id;
关键修正点
- 嵌套括号规范:将第一个LEFT JOIN的结果(
tasks与notes的连接)整体用括号包裹,再与tAttach执行左连接,符合Access对多JOIN语句的层级要求。 - 通配符修正:Access中LIKE操作符的通配符为
*,无需转义反斜杠,原查询中的'\*'改为'*'(若需求是匹配包含*的文件名,需改为'*\**')。
内容的提问来源于stack exchange,提问作者Jason
相关产品推荐
相关产品推荐

