これが私のアクセスクエリです。私が返す値はすべて必須です (残念ながら)。ただし、このクエリの最悪の部分です。WHERE 句の条件に一致する行を見逃すことがあるということです。私が試みたすべての最適化は役に立たないか、Access では実行できません (SQL を知っている)。ご覧のとおり、WHERE 句は 3 つの日付フィールドをチェックします。ここがトリッキーな部分です。Inventory Masterfile の 1 行の情報ごとに、Inventory Stores に 5 行 (「BranchID」ごとに 1 行) があり、where 句でチェックしている Date 列では、これらの 5 つのいずれかで日付が更新されている可能性があります。行、在庫マスターファイルの 1 つの行に。誰にも私を助けることができる提案はありますか? 私は何週間もデバッグしてきましたが、これについては私の知恵の終わりです。
SELECT a.Item1,im.Secondary,im.Description,im.Author_Artist,im.RetailPrice,im.CatalogID,im.Publisher, im.Binding,im.PubDate,im.Grouping,im.CategoryId,im.Alt_Category,
(SELECT MAX(ls.OnHand) FROM [Inventory Store] ls WHERE (ls.Item1 = a.Item1 AND ls.BranchID = 5)) AS 1Stock,
(SELECT MAX(ls.OnHand) FROM [Inventory Store] ls WHERE (ls.Item1 = a.Item1 AND ls.BranchID = 3)) AS 2Stock,
(SELECT MAX(ls.OnHand) FROM [Inventory Store] ls WHERE (ls.Item1 = a.Item1 AND ls.BranchID = 4)) AS 3Stock,
(SELECT MAX(ls.Maximum) FROM [Inventory Store] ls WHERE (ls.Item1 = a.Item1 AND ls.BranchID = 4)) AS Maximum,
(SELECT MAX(ls.LastSold1) FROM [Inventory Store] ls WHERE (ls.Item1 = a.Item1)) AS LastSold1,
(SELECT MAX(ls.LastUpdate) FROM [Inventory Store] ls WHERE (ls.Item1 = a.Item1)) AS LastUpdate,
(SELECT MAX(ls.LastReceived) FROM [Inventory Store] ls WHERE (ls.Item1 = a.Item1)) AS LastReceived
FROM [Inventory Store] AS a
INNER JOIN [Inventory Masterfile] im ON a.Item1 = im.Item1
WHERE (a.LastSold1 > #6/12/2012# OR a.LastUpdate > #6/12/2012# OR a.LastReceived > #6/12/2012#)
GROUP BY a.Item1, im.Secondary, im.Description, im.Author_Artist, im.RetailPrice,
im.CatalogID,im.Publisher, im.Binding,im.PubDate,im.Grouping,im.CategoryId,im.Alt_Category