MySQL 联接 - 引用三个以上的表并获得与主表匹配的数值


MySQL Join - Refer more than three tables and get vales match with main table

>我有一个表格DailyTransaction,它包含日常商店交易,如销售,购买,银行收据和凭证以及费用凭证等,

主表:每日交易

SNo         Mode            title
---------------------------------------
1             1            Sales
2             1            Sales
3             3            Bank Payment
4             2            Purchase
5             1            Sales
6             2            Purchase
7             2            Purchase
8             1            Sales
9             3            Bank Payment

表:销售额

SNo           DSNo          Amount
---------------------------------------
101             1            200
102             2            500
103             5            800
104             8            250

表:购买

SNo           DSNo          Amount
---------------------------------------
201             7            850
202             6            525
203             7            650

表:银行

SNo           DSNo          Amount
------------------------------------
301             3            450
302             9            875

我的要求是

SNo         Mode            title           DSNo          Amount
-----------------------------------------------------------------
1             1            Sales1            101            200
2             1            Sales             102            500
3             3            Bank Payment      301            450
4             2            Purchase          201            850
5             1            Sales             103            800
6             2            Purchase          202            525
7             2            Purchase          203            650
8             1            Sales             104            250
9             3            Bank Payment      302            875

DSNo是主表的主SNo每日事务列模式指定事务的类型。

请协助我如何获得预期的输出?

您的表结构使这比其他方式更难(例如,为什么销售、采购和银行有 3 个单独的表,而不是一个带有标志的表,用于表示它是什么类型?),但此查询应该为您提供所需的内容:

SELECT
    dt.SNo
    , dt.Mode
    , dt.title
    , COALESCE(Sales.SNo, Purchase.SNo, Bank.SNo) AS DSNo
    , COALESCE(Sales.Amount, Purchase.Amount, Bank.Amount) AS Amount
FROM DailyTransaction AS dt
LEFT JOIN Sales ON dt.SNo = Sales.DSNo
LEFT JOIN Purchase ON dt.SNo = Purchase.DSNo
LEFT JOIN Bank ON dt.SNo = Bank.DSNo

当然,问题是您希望根据交易类型显示来自不同表的"金额"列,这使得它比简单的连接稍微复杂一些。不过,肖恩在评论中链接到的文章绝对是一个很好的阅读。