我有兩張桌子。小部件,其中包含有關每個小部件的信息(顏色,大小等);每個小部件都有一個唯一的ID,WidgetID。
另一個表是測試,它包含有關在每個小部件上運行的多個測試的信息。因此,該表對於每個WidgetID都有多行。它包含我們可以調用的信息(WidgetID,Date,Param1,Param2等);測試信息。
我已經編寫了一個查詢,可以爲每個WidgetID查找按日期最近的兩個測試。該SQL看起來是這樣的:ms訪問複雜查詢。按日期查詢每個ID的最後兩個條目。很慢
SELECT Widgets.WidgetID,Widgets.Color,Widgets.Size,T.Date,T.Param1,T.Param2,*
自考AS T INNER JOIN小工具ON T.WidgetID = Widgets.WidgetID
WHERE(((Select COUNT(*)FROM Tests
WHERE WidgetID = T.WidgetID AND Date> T.Date))< 2);
這很有效。但是,它給了我太多的小部件。我創建了一個查詢來過濾名爲WidgetFilter的小部件。它基本上只是根據我選擇的選擇我想要的。我的想法是,我將運行相同的查詢,用「WidgetFilter」代替上述代碼中的「Widgets」。但是,當我這樣做的時候需要永遠。事實上,它只是凍結。我離開了它一個半小時,它只是坐在那裏,我不得不刪除ctl刪除。我唯一的想法是,它正在查詢每一行測試的WidgetFilter查詢(那是很多行)。我也嘗試在原始查詢中應用篩選條件。我得到相同的結果。
有沒有更好的方法來做到這一點?無論是單一的查詢,它甚至不會看起來像這樣,或者我在想的是應該有一種方法來運行WidgetFilter查詢一次,並使數據看起來像表一樣訪問(不存在這樣的事情一張臨時表)。這樣它就不會爲測試中的每個項目運行WidgetFilter。編輯:
WidgetFilter實際上是非常複雜的。我已經創建了這些用戶看到兩列的GUI選取表。左邊的選項和他/她在右邊和中間創建的列表中有一個添加按鈕和一個刪除按鈕。然後他們調用執行WidgetFilter的報告,yadda yadda yadda。無論如何,當用戶添加一個項目時,它會將該項目添加到表格中。因此,對於Widget類別Color,將會有一個名爲ColorList的表。用戶通過gui構建這個列表。有三種guis(顏色,尺寸,類型)。對於他們每個人都有一個表,然後是一個全局布爾(例如,ColorFlag),告訴哪個過濾器使用(顏色,大小或類型)。
所以,在WidgetFilter查詢時,標準顏色下框將具有這樣的:
在(選擇顏色從ColorList)
並且有一個表達式列表達式1:getColorFlag(),它是一個返回的值的模塊全局變量ColorFlag。在應用顏色表的同時也是如此。所以,當所有的說法和完成有三行標準。代碼如下所示:
選擇Widgets.WidgetID,Widgets.Color,Widgets.Size,Widgets.Type
從微
WHERE(getColorFlag()= TRUE AND(Widgets.Color)在(選擇顏色從(SelectType FROM TypeList))
OR(getSizeFlag()= True AND(Widgets.Size)In(Select Size FROM SizeList))
OR(getTypeFlag()= True AND(Widgets.Type)In(Select Type FROM TypeList))
我檢查過......這是情況並非如此。沒有空值。謝謝。 – Matt