2017-05-11 77 views
0

我想通過連接三個表來創建視圖。加入多個表以創建視圖

該模式有點複雜,所以爲了簡單起見,我只提及問題所需的表和列。

有一個表sales具有兩列:

SaleID(pkey), 
Buyer, 
Amount. 

第二個表是purchases具有兩列:

PurchaseID(pkey), 
Seller, 
Amount. 

我有一個第三表stockhistory其保持物料的流動性的軌道。 該表的模式是:

Date, 
PurchaseID(fkey to column PurchaseID, Purchases Table), 
SalesID(fkey to column SalesID, Sales Table), 
Amount(calculated amount inserted here). 

現在,每個stockhistory記錄對應到任何一個Purchases表或Sales表的記錄,但不能同時或無。 我實現這一目的的約束:

([salesid] IS NULL AND [purchaseid] IS NOT NULL OR [salesid] IS NOT NULL AND 
[purchaseid] IS NULL) 

現在,在視圖StockReport,我想拉從stockhistory表中的所有記錄,並希望顯示買方或賣方的名字就是這種情況。

我試圖寫的行的SQL:

SELECT StockHistory.date 
    , StockHistory.purchaseid 
    , StockHistory.salesid 
    , Purchases.seller 
    , Sales.buyer 
WHERE StockHistory.purchaseid = Purchases.purchaseid 
    OR StockHistory.salesid = Sales.salesid 

我怎樣才能做同樣的LEFT JOIN

+1

爲什麼不'FROM STOCKHistory LEFT JOIN上....銷售LEFT JOIN上......'這樣,你總是有從stockhistory的所有記錄,只有那些在購買相關銷售還是購買?現在,如果您對銷售或採購施加限制......這些限制必須作爲AND條件加入到JOIN中,否則您將打破左連接,使其充當內連接。左連接右側的表的限制條件必須放在連接上,而不是放在where子句中否則您將否定左連接! – xQbert

回答

3

您可以使用下面的查詢

SELECT 
     SH.date, 
     SH.purchaseid, 
     SH.salesid, 
     P.seller, 
     S.buyer 
    FROM stockhistory SH 
    LEFT JOIN Purchases P on P.PurchaseID=SH.PurchaseID 
    LEFT JOIN Sales S on S.salesid=SH.salesid 
+0

我正準備將此作爲答案。你擊敗了我。謝謝! –