连接多个表以创建视图

时间:2017-05-11 16:22:53

标签: sql sql-server database join

我想通过连接三个表来创建一个视图。

架构有点复杂,因此为了简单起见,我将仅提及问题所需的表和列。

有一个包含两列的表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 个答案:

答案 0 :(得分: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