在多个表上进行连接以创建一个视图

10 浏览
0 Comments

在多个表上进行连接以创建一个视图

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

模式有点复杂,为了简单起见,我只会提及问题所需的表和列。

有一个名为sales的表,有两列:

SaleID(主键),
Buyer,
Amount。

第二个表是purchases,有两列:

PurchaseID(主键),
Seller,
Amount。

我有第三个名为stockhistory的表,用于跟踪材料的流动。

该表的模式是:

Date,
PurchaseID(外键指向PurchaseID列,Purchases表),
SalesID(外键指向SalesID列,Sales表),
Amount(插入的计算金额)。

现在,每个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实现相同的效果?

0
0 Comments

原因:在进行多表连接创建视图时,需要使用JOIN语句将多个表连接起来,以获取所需的数据。在这个问题中,原因是需要将stockhistory表与Purchases表和Sales表进行连接,以获取日期、采购ID、销售ID、卖方和买方等信息。

解决方法:使用LEFT JOIN语句将stockhistory表与Purchases表和Sales表连接起来。通过在ON子句中指定关联条件,即Purchases表的PurchaseID与stockhistory表的PurchaseID相等,Sales表的salesid与stockhistory表的salesid相等,从而实现多表连接。然后,通过SELECT语句选择需要的列,即日期、采购ID、销售ID、卖方和买方等信息。最后,执行这个查询语句即可获得所需的结果。

以下是完整的解决方法:

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

以上就是解决这个问题的方法。这个查询语句将会返回包含日期、采购ID、销售ID、卖方和买方等信息的结果集。希望对你有所帮助!

0