2014-11-17 89 views
0

我正在嘗試實施一些現有Access數據庫,這些更改將允許估計我的僱主(我們是製造飛行案例的工業公司)的裁剪時間。這隻適用於某些類型的組件;我們有一個Stock表,其中包含每個庫存項目的信息,包括它的類別。 A Specification用於建立估計/報價的表以及名爲的表,其中包含附加到規範的庫存項目清單。 Stock INNER JOIN [Spec Components] ON Stock.ID = [Spec Components].[Stock ID]使用MS Access從兩個表中左外連接

Specification INNER JOIN [Spec Components] ON Specification.SpecID = [Spec Components].[Spec ID]

我的問題是,我只是想,如果該項目被列爲「板」,「擠出應用刀次項目中:

該表可如下加入「,」混合物「等(這是可以通過Stock.Category查詢的信息),並且根據我們引用的物品的類型使用不同的變量,例如,製造蓋盒的面板可能需要18次切割,但可能需要不同的情況要求26.案件類型是可以通過Specification.CaseType檢索的東西,並確定哪種類型的cas我們正在引用。

最初我試圖解決這個問題,在SQL查詢中使用嵌套條件語句的快速和骯髒的解決方案,但最終得到錯誤「查詢太複雜」,因爲嵌套的ifs數量有限制。

什麼我試圖現在是使用一個單獨的表包含了不同的切割/設置等的列表

Category | CaseType | Setups | Cuts | PCID 
-------------------------------------------- 
Panels | Lidmaker | 2  | 32 | 1 
Panels | Fab Lid | 4  | 16 | 1 
Extrusion | Lidmaker | 1  | 24 | 1 

然後我需要能夠在適用情況下訪問此表的內容,但仍然能夠從我的其他表格中檢索表格的內容不適用(對我來說,這表示需要在此表格上進行左外連接)。當我運行查詢我得到這個消息 MS Access Design View

不過,但我真的不明白它告訴我做什麼,或者如何在地球上:

我可以在MS Access做到這一點使用設計視圖我應該分開查詢,也許我很愚蠢? Ambiguous Outer Joins

查詢本身是這樣的:

SELECT [Spec Components].Qty, Specification.Height, Specification.Width, Specification.Depth, IIf(Cutting.Cuts>0 And Cutting.Setup>0,(Cutting.Cuts*Stock.CutTime)+(Cutting.Setup*Stock.SetupTime),0) 
FROM ((Stock INNER JOIN [Spec Components] ON Stock.ID = [Spec Components].[Stock ID]) INNER JOIN Specification ON [Spec Components].[Spec ID] = Specification.SpecID) LEFT JOIN Cutting ON (Stock.Category = Cutting.Category) AND (Specification.[Case Type] = Cutting.CaseType) 
ORDER BY [Spec Components].[Stock ID]; 
+0

如果規範最終會使用INNER JOINS返回庫存,則不能使用從Cutting到Specification的LEFT OUTER JOINS。它使你的外部連接不明確。您可能需要設置兩個單獨的查詢,然後將它們連接在一起以獲取所需內容。 –

回答

1

編輯:的Ambiguous left joins in MS Access

關於錯誤消息可能重複的,你可以找到更多信息,請訪問以下連接:

爲了解決這個問題,「你必須指定哪些方法應該通過改變加入一個或查詢分爲兩個查詢中使用。」 (從第二個鏈接引用)。

下面是使用子查詢處理問題的一種方法。

SELECT 
    Specified_Stock.Qty, 
    Specified_Stock.Height, 
    Specified_Stock.Width, 
    Specified_Stock.Depth, 
    IIf(
    Cutting.Cuts > 0 And Cutting.Setup > 0, 
    (Cutting.Cuts * Specified_Stock.CutTime) + (Cutting.Setup * Specified_Stock.SetupTime), 
    0 
) 
FROM (
    SELECT 
    [Spec Components].[Stock ID], 
    [Spec Components].Qty, 
    Specification.Height, 
    Specification.Width, 
    Specification.Depth, 
    Stock.CutTime, 
    Stock.SetupTime, 
    Stock.Category, 
    Specification.[Case Type] 
    FROM Stock 
    INNER JOIN [Spec Components] ON Stock.ID = [Spec Components].[Stock ID] 
    INNER JOIN Specification ON [Spec Components].[Spec ID] = Specification.SpecID 
) as Specified_Stock 
LEFT JOIN Cutting ON (Specified_Stock.Category = Cutting.Category) AND (Specified_Stock.[Case Type] = Cutting.CaseType) 
ORDER BY Specified_Stock.[Stock ID]; 
+0

謝謝!我可以看到你做了什麼,這很好地解決了這個問題。此查詢正被用作MS Access中數據表視圖表單的數據源;我注意到現在已經實現了,用戶無法通過數據表子表格從'[Spec Components]'中刪除記錄。 我導致認爲這是由於存在子查詢和/或有一個計算字段('TotalTime'),所以也許我將不得不添加一個新的控件/創建另一個查詢,以允許用戶要做到這一點。親切的問候。 –

+0

我不使用MS Access,但我只能假設您的假設是正確的:子查詢添加了一個圖層,可能會阻止直接訪問[Spec Components]進行刪除。 – cooltea

+0

如果我可以幫忙,我也不會使用它!在開始新的桌面應用程序之前,我一直負責在此Access系統上實施一些修復/更改,這讓我非常痛苦。再次感謝。 –