【问题标题】:MS Access- circular reference caused be alias 'Description' when exportingMS Access - 导出时导致的循环引用是别名“描述”
【发布时间】:2018-02-13 15:55:18
【问题描述】:

我有一个运行良好的查询。但是当我尝试将其导出到 csv 时:

circular reference caused by alias 'Description'in query selection's SELECT list

循环引用在哪里,为什么它只在我导出输出时发生?

 SELECT date, Time, User, Description, acct, first(tbl1) AS KYC
FROM (SELECT 
date, 
Time,
User,
First(Description) As Description,
Null as acct

FROM Tbl2
WHERE Tbl2.description not like "%New%" and Tbl2.description not like "%Out%"
GROUP BY date, Time, User, acct

UNION

SELECT date,
Time,
User,
Description,
acct

FROM Tbl2

WHERE
Tbl2.Description like "%New%" or Tbl2.Description like "%Old%"
GROUP BY date,Time,User,Description, acct)  AS KYCclean 
LEFT JOIN chg_type ON [KYCclean].[description] like [chg_type].[Matchstring]
    GROUP BY date, Time, User, Description, acct;

【问题讨论】:

    标签: sql ms-access circular-reference


    【解决方案1】:

    您可以使用列名作为别名,就像您希望在聚合函数中完全限定列一样。

    First(Tbl2.Description) As Description
    

    【讨论】:

      【解决方案2】:

      这是一个简单的错误:

      在 Access 中,您不能执行 First(Description) As Description 之类的操作,因为这些会导致循环引用。重命名该字段,它将正常工作:

      SELECT date, Time, User, FirstOfDescription, acct, first(tbl1) AS KYC
      FROM (SELECT 
      date, 
      Time,
      User,
      First(Description) As FirstOfDescription,
      Null as acct
      
      FROM Tbl2
      WHERE Tbl2.description not like "%New%" and Tbl2.description not like "%Out%"
      GROUP BY date, Time, User, acct
      
      UNION
      
      SELECT date,
      Time,
      User,
      Description,
      acct
      
      FROM Tbl2
      
      WHERE
      Tbl2.Description like "%New%" or Tbl2.Description like "%Old%"
      GROUP BY date,Time,User,Description, acct)  AS KYCclean 
      LEFT JOIN chg_type ON [KYCclean].[FirstOfDescription] like [chg_type].[Matchstring]
      GROUP BY date, Time, User, FirstOfDescription, acct;
      

      这个错误应该在多种情况下出现,而不仅仅是输出时。

      请注意,您的问题还有许多其他奇怪之处,例如您的联接中的 Like 不带括号,并使用 % 作为通配符。

      【讨论】:

      • 无需重命名,只需完全限定列,列/别名不会混淆。
      • % 是 MS SQL 服务器通配符。请小心,因为 Access SQL 和 MS SQL Server SQL 非常不同。即使您的后端在 MS SQL Server 上,您仍然需要对在前端运行的任何查询使用 Access SQL。
      【解决方案3】:

      尝试另一个别名:

      First(Description) As SomeDescription,
      

      【讨论】:

      • 由于某种原因没有修复它
      【解决方案4】:

      请注意,First() 聚合函数可能会导致结果不一致,因为它依赖于表顺序 - 在您的情况下,这不是由源中的特定 order by 子句确定的。

      更多https://msdn.microsoft.com/en-us/library/bb177902(v=office.12).aspx

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-12-12
        • 2017-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-06
        • 1970-01-01
        • 2020-08-14
        相关资源
        最近更新 更多