2017-05-11 9 views
0

3つのテーブルを結合してビューを作成したいとします。複数のテーブルを結合してビューを作成する

スキーマは少し複雑ですので、わかりやすくするために、問題に必要なテーブルと列についてのみ説明します。

2列のテーブルsalesがある:第二の表は、2列のpurchasesある

SaleID(pkey), 
Buyer, 
Amount. 

PurchaseID(pkey), 
Seller, 
Amount. 

Iは、材料の流れを追跡する第3のテーブルstockhistoryを有します。 そのテーブルのスキーマがある:

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

stockhistoryレコードの各々は、PurchasesテーブルのレコードまたはSalesテーブルのいずれかに対応し、両方ではなくまたはnone。 私はその目的のために制約があります。

([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

を使用することができます販売または購入のどちらか?今では、売上や購入に制限を課す場合...それらの制限は、ジョインにANDジョイントする必要があります。それ以外の場合は、左ジョイントを壊して、内部ジョインのように動作させます。左結合の右側にあるテーブルの制限基準は、where節にない結合に置く必要があります。そうしないと、左結合を否定できません。 – xQbert

答えて

3

`STOCKHistory左から上.... LEFT販売に参加できないのはなぜあなたは、常にすべてのstockhistoryからのレコードとに関連したものだけを持っている上...`この方法で購入を登録しようあなたは、次のクエリ

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

私はこれを自分自身の答えとして投稿しようとしていました。あなたは私にそれを打つ。ありがとうございました! –

関連する問題