在多个表上进行连接以创建一个视图
在多个表上进行连接以创建一个视图
我想通过连接三个表来创建一个视图。
模式有点复杂,为了简单起见,我只会提及问题所需的表和列。
有一个名为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
实现相同的效果?
原因:在进行多表连接创建视图时,需要使用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、卖方和买方等信息的结果集。希望对你有所帮助!