2014-09-18 3 views
0

Я недавно наткнулся на эту тему, когда пользователь пытался вернуть некоторые данные, используя вспомогательный запрос, основанный на максимальном значении другого запроса, Original Post это именно то, что я хотел бы делать.Пытаться воспроизвести запрос MySQL в MS Access

Что я пытаюсь сделать, это извлечь самую последнюю запись в журнале из моей таблицы аудита «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' 

EDIT: Я сделал, как @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'; 

ответ

1

Я не могу обнаружить ошибку в SQL, но хотел бы предложить:

  1. Создать свой SQL подзапрос как сохраненное «темп» запроса в Access. Контрольная работа.
  2. В новом запросе добавьте запрос из (1), добавьте еще одну таблицу, ссылку и тест.
  3. Добавить любые другие таблицы, ссылку, тест.
  4. Добавить критерии (ГДЕ).

Как только вы убедитесь, что он работает нормально, вы можете заменить запрос из (1), используя его как подзапрос в основном запросе sql.

+0

Спасибо Макс, я сделал это, и он изменил мои соединения, я действительно не понимаю, какая разница! но я редактировал свой вопрос, чтобы показать рабочую версию. Доступ глуп. –

+0

Из вашего Редактирования выше, похоже, что запрос работает нормально. Могли ли вы определить причину проблемы? (Любопытно, что я!) – maxhugen

+0

Да, теперь это работает. Я действительно не слишком уверен, я снова изменил запрос после его работы и могу только предположить, что Access применяет какое-то правило в порядке объединения при использовании подзапроса. Казалось бы, что подзапрос должен немедленно следовать за предложением FROM, в противном случае возникает ошибка синтаксиса (отсутствующий оператор). –