MS Access постоянно меняет мой SQL, который потом не может прочитать - PullRequest
1 голос
/ 02 ноября 2011

Доброе утро / день,

У меня очень простая БД MS Access, и у меня есть запрос, который прекрасно работает, пока MS Access не получит его и не сделает его более «читабельным», который он затем не сможет прочитать. Это запрос:

SELECT Checkout.*
FROM Checkout, (SELECT seatNumber, MAX(dateOut) AS lastOut FROM Checkout GROUP BY seatNumber) AS resultTable
WHERE Checkout.seatNumber=resultTable.seatNumber And resultTable.lastOut=Checkout.dateOut;

И вот что Access меняет это на:

SELECT Checkout.*
FROM Checkout, [SELECT seatNumber, MAX(dateOut) AS lastOut FROM Checkout GROUP BY seatNumber; ] AS resultTable
WHERE Checkout.seatNumber=resultTable.seatNumber And resultTable.lastOut=Checkout.dateOut;

А потом продолжает, что не может найти стол.

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

Большое спасибо.

Ответы [ 2 ]

3 голосов
/ 02 ноября 2011

Я обычно инкапсулирую логику внутренних таблиц, таких как resultTable, как отдельный VIEW (QUERY на языке MS Access).Если вы сделаете это, вы сможете без проблем обратиться к нему в своем запросе.

Вы также можете написать запрос такого типа как

SELECT * FROM Checkout C1
WHERE NOT EXISTS (SELECT * FROM CheckOut C2 
    WHERE C2.seatNumber = C1.seatNumber AND C2.dateOut > C1.dateOut);

, который не должен быть поврежден Access.

Если вы когда-нибудь видели фильм Продюсеры , в конце есть сцена в зале суда, в которой персонаж Зеро Мостеля говорит Джину Уайлдеру: «Лев! Не помогай мне!»Я часто говорю то же самое при использовании MS Office.

0 голосов
/ 02 ноября 2011

Я запустил Access и запустил следующий запрос в Access 2010 с копией Northwind.mdb, но он не был автоматически исправлен.На какой версии Access вы работаете?

SELECT orders.*
from orders, (select orderid, max(quantity) as maxq from [order details] group by orderid ) as results
where orders.orderid = results.orderid
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...