【问题标题】:Access can't represent the join expression joining on substringAccess 不能表示连接子字符串的连接表达式
【发布时间】: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)... ;

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

【问题讨论】:

    标签: sql ms-access join


    【解决方案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 )
    

    不会

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-17
      • 1970-01-01
      • 2017-04-12
      • 2010-10-13
      • 2018-05-22
      • 2015-02-08
      • 1970-01-01
      相关资源
      最近更新 更多