2011-11-02 50 views
1

早上好/下午,的MS Access不斷變化我的SQL,它則無法讀取

我有一個非常簡單的MS Access數據庫和我有到MS訪問得到它的手,它和正常工作查詢使它更「可讀」,然後它不能閱讀。這是查詢:

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; 

而這正是訪問軋液成:

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的幫助,但我想知道是否有人可以幫我完成查詢的返工。我有種做事的方式,然後當這種做法失效時很難擺脫它。我希望能有一個新的,也許更有經驗的眼睛比我的能夠幫助我。

非常感謝。

+1

您是否嘗試過在MS Access中以圖形方式構建和編輯查詢?正如你似乎已經發現的,編輯MS Access的SQL有一些風險。圖形方法有點繁瑣,因爲您可能需要創建「摘要」類型的查詢作爲獨立查詢結果表,然後將其加入到表結帳。 – hardmath

回答

3

我通常將內部表的邏輯像resultTable一樣封裝爲單獨的VIEW(MS Access中的QUERY語句)。如果你這樣做,你應該能夠在查詢中毫無問題地引用它。

你也可以寫這種類型的查詢作爲

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

不應由接入中獲得錯位。

如果你曾經看過電影The Producers最後有一個審判室場景,Zero Mostel的角色對Gene Wilder的「獅子座!不要幫助我!」我發現自己經常在使用MS Office時說同樣的事情。

+0

謝謝拉里,我試圖避免創建一個單獨的查詢,沒有其他原因,我喜歡所有的東西都整齊,更多的查詢看起來對我來說似乎混亂。我可能應該放棄這個特定的強制,但是,嘿,我們都有我們的怪癖。謝謝你的返工,它的效果很好。現在我要把它全部分開,以便我能弄清楚它是如何工作的。哦,如果我能讓MS Office不能一直幫助我,我會是對的。我沒看過電影,但我感覺到它。 – bwri1407

+0

我聽到你的意見,但考慮到如果你在應用程序的其他地方使用相同的內部表邏輯,那麼你違反了DRY原則,可能會考慮使用中間視圖。 –

+0

拉里的建議只是一個變化(主觀上更易讀): SELECT * FROM Checkout as C1 WHERE C1.dateOut =(SELECT MAX(dateOut)FROM Checkout as C2 WHERE C2.seatNumber = C1.seatNumber) – Yarik

0

我啓動了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 
+0

我使用的是2003,當我從菜單中打開查詢時,它只是破壞它,如果我從實際查詢中運行它,它工作正常,這是我如何知道它實際上在第一個地方工作。如果我沒有從菜單中運行它,我可以在其他區域(如VBA)中使用查詢表。 – bwri1407