Access 不能表示连接子字符串的连接表达式

Posted

技术标签:

【中文标题】Access 不能表示连接子字符串的连接表达式【英文标题】:Access can't represent the join expression joining on substring 【发布时间】:2017-08-17 19:22:24 【问题描述】:

我尝试在 Access 中构建一个复杂的查询。我使用了不匹配查询向导来检查一个表中的多个字段是否与另一个表中的字段不匹配。其中一些需要是子字符串。基本上如果Table1.F的右2个字符=Table2.F的右2个字符。

如果我在 SQL 视图中编写它,我的 SQL 是正确的。但是当我尝试切换回设计视图时,我收到一条消息:

Microsoft Access 无法在设计视图中表示连接表达式 Right(Table1.F,2) = Right(Table2.F,2)。

这基本上就是我所拥有的:

UPDATE TABLE1 LEFT JOIN TABLE2 ON (TABLE1.A = TABLE2.A) AND (TABLE1.B = 
TABLE2.B)...
AND ( RIGHT(TABLE1.F,2) = RIGHT(TABLE2.F,2) )
SET TABLE1.ERROR = X
WHERE (TABLE2.A IS NULL) AND (TABLE2.B IS NULL)... ;

有没有办法以设计视图可以接受的方式编写这个?

【问题讨论】:

【参考方案1】:

关于mysql在ms-access中设置值放在join条件之前

  UPDATE T 
  SET T.ERROR = X
  FROM TABLE1 AS T
  LEFT JOIN TABLE2 ON TABLE1.A = TABLE2.A 
        AND TABLE1.B = TABLE2.B ... 
           AND  RIGHT(TABLE1.F,2) = RIGHT(TABLE2.F,2)  
                AND TABLE2.A IS NULL AND TABLE2.B IS NULL ... ;

您可以避免在比较中使用无用的 ( ),并且总体上不要在左连接中涉及的表的列上使用 where 条件 .. 这样,where 作为内部连接工作 将条件移到左连接的 on 子句中

【讨论】:

不允许这样做。语法错误。不喜欢“set”后面的“from”子句。不必要的括号会从查询构建器中自动添加。它出于某种原因爱他们。我删除它们,然后又放回去。 answer update ..with alias for update table .. 但在语法上似乎是正确的 .. 你确定你在使用 ms 访问这个代码吗??【参考方案2】:

当我尝试使用在线工具格式化 SQL 查询时遇到了类似的问题。事实证明,如果括号之前或之后有空格,MS-access 无法翻译查询的联合部分 例如

INNER JOIN Tb1 ON (Tb.F = Tb2.F1)

从 Sql 转换为设计视图,但是

INNER JOIN Tb1 ON ( Tb.F = Tb2.F1 )

不会

【讨论】:

以上是关于Access 不能表示连接子字符串的连接表达式的主要内容,如果未能解决你的问题,请参考以下文章

Java中的基本运算符

错误 3296:具有多个 JOIN 的 MS Access 查询中不支持连接表达式

如何替换 Javascript 中的正则表达式子字符串匹配?

Access 中的“不支持连接表达式”

从零开始学习Oracle数据库函数与子查询和连接查询

从零开始学习Oracle数据库函数与子查询和连接查询