【问题标题】:Trying to reproduce a MySQL query in MS Access试图在 MS Access 中重现 MySQL 查询
【发布时间】:2014-09-18 09:02:05
【问题描述】:

我最近偶然发现了这个线程,其中用户试图使用基于另一个查询的最大值的子查询返回一些数据,Original Post 这正是我想做的。

我要做的是从我的审计表“Modification_Log”中提取最近的日志条目,以便我可以列出最近的更改日期,以及谁以比检索多个查询更优雅的方式进行更改。我已经在这里Database Administrator's Stack 进行了更详细的介绍,我不是要求用勺子喂食,但我根本不知道出了什么问题!

SELECT Employee.EmployeeID, Employee.PositionID, Employee.Title, Employee.Firstname, Employee.Surname, Employee.Email,  Modification_Log.ModifiedDate, Modification_Log.ModifiedEmployee
FROM Employee INNER JOIN Modification_Log ON Employee.EmployeeID = Modification_Log.RecordID  INNER JOIN
               (SELECT Modification_Log.RecordID, Max(Modification_Log.ModificationID) As NewestModificationID
               FROM Modification_Log
               GROUP BY Modification_Log.RecordID) As LogMax
ON Employee.EmployeeID = LogMax.RecordID AND Modification_Log.ModificationID = LogMax.NewestModificationID
WHERE Employee.EmployeeID = 3 AND Modification_Log.TableName = 'Employee'

编辑:我按照@maxhugen 的建议在下面做了,瞧……访问它的无限智慧重新排列查询以首先引用连接的查询,我已经编辑它并再次用子查询替换,这个工作时间:

SELECT Employee.EmployeeID, Employee.PositionID, Employee.Title, Employee.Firstname, Employee.Surname, Employee.Email, Modification_Log.ModifiedDate, Modification_Log.ModifiedEmployee
FROM 
         (SELECT Modification_Log.RecordID, Max(Modification_Log.ModificationID) As NewestModificationID
         FROM Modification_Log
         GROUP BY Modification_Log.RecordID) As LogMax 
INNER JOIN (Employee INNER JOIN Modification_Log ON Employee.EmployeeID = Modification_Log.RecordID) ON (LogMax.NewestModificationID = Modification_Log.ModificationID) AND (LogMax.RecordID = Employee.EmployeeID)
WHERE Employee.EmployeeID=3 AND Modification_Log.TableName='Employee';

【问题讨论】:

    标签: sql ms-access


    【解决方案1】:

    我无法在您的 sql 中发现错误,但建议:

    1. 将您的 sql 子查询创建为 Access 中保存的“临时”查询。测试。
    2. 在新查询中,添加来自 (1) 的查询,再添加一个表、链接和测试。
    3. 添加任何其他表格、链接、测试。
    4. 添加条件 (WHERE)。

    确保它运行正常后,您可以使用它的 SQL 作为主查询 sql 中的子查询来替换 (1) 中的查询。

    【讨论】:

    • 谢谢 Max,我这样做了,它重新安排了我的连接,我真的看不出它有什么不同!但我已经编辑了我的问题以显示工作版本。访问是愚蠢的。
    • 从您上面的编辑中,听起来查询现在工作正常。您是否能够确定问题的原因? (好奇自己!)
    • 是的,现在可以使用了,谢谢。我真的不太确定,我在让它工作后再次重新排列了查询,只能假设 Access 在使用子查询时对连接顺序强制执行某种规则。看起来子查询需要立即跟在 FROM 子句之后,否则会引发语法错误(缺少运算符)。
    猜你喜欢
    • 1970-01-01
    • 2019-11-17
    • 1970-01-01
    • 2020-11-04
    • 1970-01-01
    • 1970-01-01
    • 2020-04-22
    • 2010-09-29
    • 1970-01-01
    相关资源
    最近更新 更多