Access执行含UNION ALL子查询的JOIN语句提示不支持如何解决?
报错原因
- Access的JOIN语法强制要求ON子句必须写全两边表的关联匹配条件,你当前写法只写了
ON tbl_f.P,缺少子查询侧的关联字段,语法不合法。 - 嵌套的联合查询作为JOIN的数据源时,Access要求必须给该子查询设置别名,否则无法识别这个临时数据源。
解决方法
给子查询添加别名,补全关联条件即可,修正后的SQL语句如下:
SELECT * FROM tbl_f INNER JOIN( SELECT P, Area FROM tbl_l UNION ALL SELECT P, Area FROM tbl_m UNION ALL SELECT P, Area FROM tbl_w) AS t_union ON tbl_f.P = t_union.P;
如果你的需求是生成新表,只需要在SELECT后加INTO 你的新表名即可,示例:
SELECT * INTO 新表名称 FROM tbl_f INNER JOIN( SELECT P, Area FROM tbl_l UNION ALL SELECT P, Area FROM tbl_m UNION ALL SELECT P, Area FROM tbl_w) AS t_union ON tbl_f.P = t_union.P;
对应的修正后VBA代码如下:
Dim strSQL as String ' 普通查询版本 strSQL = "SELECT * FROM tbl_f INNER JOIN( SELECT P, Area FROM tbl_l UNION ALL SELECT P, Area FROM tbl_m UNION ALL SELECT P, Area FROM tbl_w) AS t_union ON tbl_f.P = t_union.P;" ' 如果是生成新表版本,替换成下面这句即可 ' strSQL = "SELECT * INTO 新表名称 FROM tbl_f INNER JOIN( SELECT P, Area FROM tbl_l UNION ALL SELECT P, Area FROM tbl_m UNION ALL SELECT P, Area FROM tbl_w) AS t_union ON tbl_f.P = t_union.P;"
额外提示:需要确保4张表的P字段类型完全一致,否则关联时可能会出现类型不匹配报错。
内容的提问来源于stack exchange,提问作者user16800302
相关产品推荐
相关产品推荐

