由於Where條件中的兩列(tblEventLog.PartNumberChgLvl
),此查詢不起作用。 我應該如何更改查詢來解決問題?MS ACCESS查詢
strNewSql1 = _
"SELECT DISTINCT " & _
"tblRevRelLog_Detail.PartNumber, " & _
"tblRevRelLog_Detail.ChangeLevel " & _
"FROM tblRevRelLog_Detail LEFT JOIN tblEventLog " & _
"ON (tblEventLog.PartNumber = tblRevRelLog_Detail.PartNumber) " & _
"AND (tblEventLog.PartNumberChgLvl " & _
"= tblRevRelLog_Detail.ChangeLevel) " & _
"WHERE (tblEventLog.PartNumber, tblEventLog.PartNumberChgLvl) NOT IN " & _
"(SELECT tblEventLog.PartNumber, tblEventLog.PartNumberChgLvl " & _
"FROM tblEventLog " & _
"WHERE tblEventLog.EventTypeSelected = 'pn REMOVED From Wrapper' " & _
"AND tblEventLog.PartNumber = tblRevRelLog_Detail.PartNumber " & _
"AND tblEventLog.PartNumberChgLvl " & _
"= tblRevRelLog_Detail.ChangeLevel) " & _
"AND tblEventLog.TrackingNumber = """ & tempTrackingNumber & """ " & _
"AND tblEventLog.PartNumber = tblRevRelLog_Detail.PartNumber " & _
"AND tblEventLog.PartNumberChgLvl = tblRevRelLog_Detail.ChangeLevel;"
我用一個例子來展示這個。
例如:讓我們兩個包1和2
封裝1具有A-1,B-0,C-1部分號碼與changelevels和 包2具有-1,d-1,E -1帶更改級別的零件編號
如果我從包裝1中刪除「a-1」,應該不會顯示該包裝,但應該顯示包裝2.使用此查詢它不會顯示在包裝中2也。
Reviewrelease_Form(主要形式)連接至reviewreleasetable:
此表包含基本數據和包裝器數
包裝號:RevRel_Form(子窗體)鏈接到tblRevRelLog_Detail
event_Input是窗體在這裏我們輸入事件。當我選擇一個事件時它將顯示partnumbers。這是查詢進入圖片的地方。
這不應該顯示被刪除的partnumbers。這工作正常。但是,如果具有相同changelevl的相同零件號從diff包中刪除,它也不會顯示在當前包中。
喜布蘭登,這並不是說慢,但仍然是拉動相同的記錄。我沒有看到任何區別.. – user397316 2011-02-03 18:25:50
你有沒有試過一個緊湊和修復? – 2011-02-03 19:37:50
請注意,「不在」和「不存在」不能由Jet/ACE查詢優化器進行可靠優化,並且可能不會在比較的兩側使用索引。 IN和EXISTS本身會可靠地使用雙方的索引,但NOT操作符往往會導致它失敗。可以使用JOIN來代替(總是會進行很好的優化),特別是在不需要可編輯性的情況下(如此處所示)。你沒有遇到性能問題的事實告訴我,你的後端實際上不是Jet/ACE,而是其他一些數據庫。 – 2011-02-06 00:38:33