2015-08-08 30 views
2

我一直在努力將兩個查詢的結果通過公共表上的連接組合在一起,我希望能獲得一些幫助。下面是一個粗略的指南表:將兩個查詢連接到共享表上

dbo.Asset (not returned in the SELECT statement, used for joins only) 
- dbo.Asset.AssetID 
- dbo.Asset.CatalogueID 

dbo.WorkOrder 
- WorkOrderID 
- AssetID 
- WorkOrderNumber 

dbo.WorkOrderSpare 
- WorkOrderID 
- WorkOrderSpareID 
- WorkOrderSpareDescription 
- ActualQuantity 
- CreatedDateTime 

dbo.Catalogue 
- CatalogueID (PK) 
- CatalogueNumber 
- CatalogueDescription 
- CatalogueGroupID 

dbo.CatalogueGroup 
- CatalogueGroupID 
- CatalogueGroupNumber 

首先查詢:

SELECT CatalogueGroup.CatalogueGroupName, 
    Catalogue.CatalogueNumber, 
    Catalogue.CatalogueDescription, 
    Catalogue.CatalogueID, 
    Asset.IsActive 
FROM CatalogueGroup 
INNER JOIN Catalogue 
ON CatalogueGroup.CatalogueGroupID = Catalogue.CatalogueGroupID 
INNER JOIN Asset 
ON Catalogue.CatalogueID = Asset.CatalogueID 

第二個查詢:

SELECT WorkOrder.WorkOrderNumber, 
    WorkOrderSpare.WorkOrderSpareDescription, 
    WorkOrderSpare.ActualQuantity, 
    WorkOrderSpare.CreatedDateTime 
FROM WorkOrder 
INNER JOIN WorkOrderSpare 
ON WorkOrder.WorkOrderID = WorkOrderSpare.WorkOrderID 

現在我能做到上面很輕鬆地在Access(WYSIWYG)將Asset/Catalog/CatalogueGroup加入到一起,然後將Asset.AssetID加入WorkOrder.AssetID。我似乎無法通過原始代碼獲得與工作類似的任何東西,我想我的邏輯對於連接是正確的(兩者的結果都是INNER JOIN),但是我對此很陌生。

任何援助將不勝感激,任何指向哪裏我可以進一步閱讀這樣的問題會很好。

編輯:這就是我想要,而不是訪問(試圖從拖放移開)使用無果,我還要提到我試圖做到這一點在MS-SQL:

SELECT CatalogueGroup.CatalogueGroupName, 
    Catalogue.CatalogueNumber, 
    Catalogue.CatalogueDescription, 
    Catalogue.CatalogueID, 
    Asset.IsActive, 
    WorkOrderSpare.WorkOrderSpareDescription, 
    WorkOrderSpare.ActualQuantity, 
    WorkOrderSpare.CreatedDateTime, 
    WorkOrder.WorkOrderNumber 
FROM (((CatalogueGroup 
INNER JOIN Catalogue 
ON CatalogueGroup.CatalogueGroupID = Catalogue.CatalogueGroupID) 
INNER JOIN Asset ON Catalogue.CatalogueID = Asset.CatalogueID) 
INNER JOIN WorkOrderSpare 
ON WorkOrder.WorkOrderID = WorkOrderSpare.WorkOrderID) 
INNER JOIN WorkOrder ON Asset.AssetID = WorkOrder.AssetID 
+1

如果您發佈了您嘗試運行的代碼無法運行,可能會有所幫助。看到你的嘗試可能比現在寫的問題更有價值。你可能會犯一個非常簡單的錯誤,有人可以輕易發現。 –

+0

此外,您不能顯示所見即所得設計器在Access中生成的SQL查詢嗎? (我不記得這是否是一個功能,在很多年以來我都沒有碰到過Access。) –

+0

你想用什麼鍵來加入這兩個結果集?或者,您想以哪種方式合併這兩個結果集? – DanFromGermany

回答

0

想我看到的問題。假設連接本身是正確的(即你的列確實相互關聯),那麼你的連接順序有點偏離 - 當你將WorkOrder連接到WorkOrderSpare時,這兩個表都不會與你已經識別的任何表相關聯直到查詢中的那個點。把它看作是連接兩個表,分別與你迄今爲止的連接鏈 - 分開,就像做兩個單獨的連接查詢。如果您切換最後兩個,它應該可以工作,這樣WorkOrder將加入Asset(您已經定義),然後您可以將WorkOrderSpare加入WorkOrder。我也冒着去除連接上的括號,這是一個Access的東西。

SELECT CatalogueGroup.CatalogueGroupName, 
    Catalogue.CatalogueNumber, 
    Catalogue.CatalogueDescription, 
    Catalogue.CatalogueID, 
    Asset.IsActive, 
    WorkOrderSpare.WorkOrderSpareDescription, 
    WorkOrderSpare.ActualQuantity, 
    WorkOrderSpare.CreatedDateTime, 
    WorkOrder.WorkOrderNumber 
FROM CatalogueGroup 
INNER JOIN Catalogue ON CatalogueGroup.CatalogueGroupID = Catalogue.CatalogueGroupID 
INNER JOIN Asset ON Catalogue.CatalogueID = Asset.CatalogueID 
INNER JOIN WorkOrder ON Asset.AssetID = WorkOrder.AssetID 
INNER JOIN WorkOrderSpare ON WorkOrder.WorkOrderID = WorkOrderSpare.WorkOrderID 
+0

@J.Young如果上面的答案適合你,你是否介意加註和接受?我在一個模擬數據庫中測試了它,它應該可以工作。我花了相當長的時間:) –

0

我覺得你很親密。作爲一個稍微不同的方式加入,試試這個:

SELECT CatalogueGroup.CatalogueGroupName, 
    Catalogue.CatalogueNumber, 
    Catalogue.CatalogueDescription, 
    Catalogue.CatalogueID, 
    Asset.IsActive, 
    WorkOrderSpare.WorkOrderSpareDescription, 
    WorkOrderSpare.ActualQuantity, 
    WorkOrderSpare.CreatedDateTime, 
    WorkOrder.WorkOrderNumber 
FROM 
    CatalogueGroup, Catalogue, Asset, WorkOrder, WorkOrderSpare 
WHERE CatalogueGroup.CatalogueGroupID = Catalogue.CatalogueGroupID 
    and Catalogue.CatalogueID = Asset.CatalogueID 
    and Asset.AssetID = WorkOrder.AssetID 
    and WorkOrder.WorkOrderID = WorkOrderSpare.WorkOrderID 

它看起來像它應該工作,但沒有數據,很難知道簡單連接,一路過關斬將是你想要的。 (關於是否使用and子句而不是內部連接語法,個人偏好是個問題,而在樣式首選項中,如果支持,我喜歡錶別名,因此,例如FROM CatalogueGroup cg,以便您可以參考cg.CatalogueGroupID等,而不是寫出每次全表名稱。)

+0

當我嘗試時沒有任何事情發生,也可能是我的連接不正確,如果我再次閱讀連接以確保邏輯正確,可能是最好的! –

+0

它可能是數據。這取決於模型的意圖。 workOrder和資產之間有什麼關係(每個workOrder只有一個資產?)以下是您可以使用的[sqlFiddle](http://sqlfiddle.com/#!9/8d86a/1)。如果你在那裏填寫一些現實的數據,它可能有助於弄清楚你正在嘗試做什麼。 – wwkudu

0

好的。讓你在評論指出錯誤

多部分標識符「WorkOrder.WorkOrderID」無法綁定

通常是當你有一個別名爲表,而是使用別名在JOIN中使用表名或者當您使用錯誤的列名或表名時。

理想的情況下在SQL Server的查詢應該是這樣的

SELECT 
    cg.CatalogueGroupName, 
    c.CatalogueNumber, 
    c.CatalogueDescription, 
    c.CatalogueID, 
    A.IsActive, 
    Wo.WorkOrderNumber, 
    WoS.WorkOrderSpareDescription, 
    WoS.ActualQuantity, 
    WoS.CreatedDateTime 
FROM CatalogueGroup cg 
    INNER JOIN Catalogue c ON cg.CatalogueGroupID = c.CatalogueGroupID 
    INNER JOIN Asset A ON c.CatalogueID = A.CatalogueID 
    INNER JOIN WorkOrder Wo ON Wo.AssetID= A.AssetID 
    INNER JOIN WorkOrderSpare WoS ON Wo.WorkOrderID = WoS.WorkOrderID